Как создать модуль для Joomla который будет обновляться с помощью встроенной системы обновлений с выходом новой версии модуля? Это актуально для тех кто разрабатывает модули для своих проектов на Joomla. Если учесть что проектов много а модуль удалось существенно усовершенствовать, или в нём была найдена ошибка, вместо того чтобы устанавливать новую версию в ручную на все проекты намного проще воспользоваться родной системой обновления из админпанели. Также может случится так, что проект вам больше не принадлежит и доступа в админпанель у вас нет, но вам хочется чтобы ваши модули хорошо работали везде где они установлены (особенно, повторюсь, если вы обнаружили серьёзный баг).
Для того чтобы не платить за хостинг, лучше всего воспользоваться github.com 🙂 Создайте репозиторий для вашего модуля. Мой проверенный пример подобного модуля https://github.com/mcmraak/avaphp
Этот модуль не делает ничего, кроме того что устанавливается и позволяет использовать свои альтернативные макеты. Я использую его для внедрения в проекты Joomla своего функционала на PHP, мне кажется это удобнее чем использовать модули или плагины для вставки PHP кода, потому что они обычно хранят код в базе данных и его проблематично править без возможностей полноценного редактора кода или IDE. У меня уже заготовлен целый набор альтернативных макетов под разные задачи. Это и формы обратной связи и своеобразные приёмы подачи материала и вообще всё что мне приходится писать ручками я храню в альтернативных макетах для данного модуля. Он простой как автомат Калашникова, в нём нет ничего лишнего, но зато он позволяет гибко вставлять какой угодно функционал в любое место проекта используя вызов по метке позиции, или по шоткоду {loadposition …} в теле контента. Альтернативные макеты могут подгружать свои JS и CSS библиотеки, использовать AJAX и вообще делать что душе угодно используя API Joomla.
Итак разберём структуру модуля:
1 2 3 4 5 6 7 8 |
tmpl // Папка в которой лежит пустой альтернативный макет default.php .gitignore // Это файл git README.md // Это файл git index.html // Пустой файл "Заглушка" mod_avaphp.php // Индексный файл модуля mod_avaphp.xml // xml-файл модуля mod_avaphp.zip // Архив модуля update.xml // Этот файл необходим для системы обновлений Joomla |
В архиве mod_avaphp.zip лежат только те файлы, которые принадлежат модулю, т.е. там нет файлов .gitignore, README.md, update.xml
Для того чтобы модуль обновлялся, нужно поработать с двумя файлами mod_avaphp.xml и update.xml
mod_avaphp.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="3" client="site" method="upgrade"> <name>Custom PHP module for Joomla</name> <author>Aleksandr Ablizin (mcmraak@gmail.com)</author> <creationDate>30.06.2016</creationDate> <copyright>mcmraak @ 2016 - Free Joomla Module</copyright> <license>Free</license> <authorEmail>mcmraak@gmail.com</authorEmail> <authorUrl>www.mraak.ru</authorUrl> <version>1.0.1</version> <description>Custom PHP module for Joomla</description> <files> <folder>tmpl</folder> <filename module="mod_avaphp">mod_avaphp.php</filename> <filename>index.html</filename> <filename>mod_avaphp.xml</filename> </files> <config> <fields name="params"> <fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" /> </fieldset> </fields> </config> <updateservers> <server type="extension" priority="1" name="Custom PHP module for Joomla">https://raw.githubusercontent.com/mcmraak/avaphp/master/update.xml</server> </updateservers> </extension> |
Для системы обновлений важно обратить внимание на следующие теги в этом файле:
<version>1.0.1</version> // Это текущая версия модуля
version=»3″ // Это версия Joomla для которой будет осуществляться обновление, если написать version=»3.5″ то обновление для этого модуля в случае если у вас версия Joomla выше, не будет производится
и самое главное
1 2 3 |
<updateservers> <server type="extension" priority="1" name="Custom PHP module for Joomla">https://raw.githubusercontent.com/mcmraak/avaphp/master/update.xml</server> </updateservers> |
Вот тут-то как раз указано, где лежит файл update.xml в котором система обновления прочитает, не вышла ли новая версия модуля, и где лежит архив c ним.
update.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?xml version="1.0" encoding="utf-8"?> <updates> <update> <name>Custom PHP module for Joomla</name> <description>Custom PHP module for Joomla</description> <element>mod_avaphp</element> <type>module</type> <version>1.0.1</version> <downloads> <downloadurl type="full" format="zip">https://github.com/mcmraak/avaphp/raw/master/mod_avaphp.zip</downloadurl> </downloads> <maintainer>Joomla</maintainer> <maintainerurl>https://mraak.ru</maintainerurl> <targetplatform name="joomla" version="3"/> <client>site</client> </update> </updates> |
Тут все должно быть понятно, важные секции:
<version>1.0.1</version> // Сюда посмотрит наша система обновлений и решит обновляться или нет.
<targetplatform name=«joomla« version=«3«/> // Для какой версии Joomla данное обновление актуально
и наконец, где взять архив с новой версией:
1 2 3 |
<downloads> <downloadurl type="full" format="zip">https://github.com/mcmraak/avaphp/raw/master/mod_avaphp.zip</downloadurl> </downloads> |