Вступление

Этот материал предназначен для обучения разработчиков, как создать сервер обновлений для интеграции с системой обновлений, введенной в Joomla!. При добавлении сервера обновлений в манифест вашего расширения, разработчики дают возможность пользователям обновлять их расширения через менеджер расширений всего несколькими щелчками мыши.

Определение сервера обновлений

Для того, чтобы использовать эту функцию, сервер обновлений должен быть определен в манифесте (xml файле) вашего расширения. Это определение может быть использовано во всех Joomla! 2,5 и более новых, но не доступен для шаблонов. Вы можете использовать два варианта для вашего типа сервера: Коллекцию и расширение. Этот код должен быть добавлен в файл манифеста расширения в самый корень (root).Сервер обновлений определяется следующим образом

 <extension>
<...>
<updateservers>
<server type="collection">http://example.com/list.xml</server>
<server 
		type="extension" 
		priority="2" 
		name="Обновление моего расширения">
			http://example.com/extension.xml
</server>
</updateservers>
</extension>

Несколько серверов могут быть определены в <updateservers> теге.

Типы серверов

Коллекция

Тип сервера коллекция позволяет разработчикам определять в манифесте - качать обновления из коллекции. Этот тип сервера можно использовать, если разработчик хочет определить все обновления расширений в одном файле (не рекомендуется), или если его расширение имеет несколько суб-расширений, которые не распределенные или обновляются в то же время (например, в типе расширений - пакет).Ниже пример определения коллекции когда обновления ядра  Joomla!:

<extensionset name="Joomla Core" description="Joomla! Core">
<extension 
		name="Joomla" 
		element="joomla" 
		type="file" 
		version="1.7.0" 
		detailsurl="http://update.joomla.org/core/extension.xml"/>
</extensionset>

Все определения должны быть определены между <extensionset> тегами в вашем манифесте - коллекции.<extensionset> тег имеет два необязательных параметра; название и описание. Для каждого расширения необходим отдельный <extension> тег. Тег <extension> имеет следующие параметры, все они необходимы для обновления:

  • name - название расширения
  • element - машинное название расширения к примеру mod_custom
  • type - тип расширения (component, module, plugin, etc.)
  • version - последняя версия расширения
  • detailsurl - адрес другого XML файла, который содержит информацию по обновлению

Расширение

Тип сервера "расширение" позволяет разработчикам определять единственный файл для одного расширения. Коллекция в параметре detailsurl содержит ссылку на этот документ. Все обновления в этом файле должны быть определены после тега <updates>  в начале файла.Ниже пример определение обновления для Joomla! 1.7.0:

 <update>
<name>Joomla! 1.7</name>
<description>Joomla! 1.7 CMS</description>
<element>joomla</element>
<type>file</type>
<version>1.7.0</version>
<infourl title="Joomla!">http://www.joomla.org/</infourl>
<downloads>
	<downloadurl
			type="full" 
			format="zip">
				http://joomlacode.org/gf/download/15279/66552/Joomla_1.6.5_to_1.7.0_Package.zip
	</downloadurl>
</downloads>
<tags>
	<tag>stable</tag>
</tags>
<maintainer>Sam Moffatt</maintainer>
<maintainerurl>http://sammoffatt.com.au</maintainerurl>
<section>Testing</section>
<targetplatform name="joomla" version="1.6"/>
</update>

Дальше описание элементов этого типа.

  • name - Название расширения (обязательное), это название будет отображаться в столбце Название в менеджере расширений во вкладке Обновления
  • description - Короткое описание расширения (не обязательное поле) -- если вы используете <![CDATA[]]>, То двойные кавычки сломают HTML разметку. Используйте одинарные кавычки.
  • element - Машинное название системы (обязательное). Для плагинов, это название должно быть такое же, какое используется в теге <filename plugin="pluginname">pluginname.php</filename>, тут element должен быть равен pluginname.
  • type - Тип расширения (component, module, plugin, и т.д.) (обязательное)
  • folder - Этот элемент нужен для плагинов, он описывает к какой группе относится плагин (content, system, и т.д.) (обязательно для плагинов)
  • client  -  сторона расширения. 0 это "site" и 1 это "administrator". Плагины и front-end модули автоматически инсталлируются с clien=0 (site), но при обновлении вы должны определить 0 (site) или (administrator) тогда это будет уже другое расширение. Компоненты инсталлируются по умолчанию с 1.
    • Важно: название тега <client> только для Joomla! 2.5 и выше, а <client_id> для 1.6 and 1.7. Вы можете использовать <client_id> (вместе с <client>) на Joomla 2.5, этот элемент просто будет проигнорирован.
  • version - Версия релиза (обязательное)
  • infourl - URL по которому содержится информацию об обновлении (не обызательное) (В Joomla 2.5 и выше, если установлен URL, то он будет отображаться в окне обновления)
  • downloads - Раздел, в котором перечислены все адреса для загрузки
    • downloadurl -URL адрес загрузки расширение;<downloadurl> тег имеет два обязательных параметра:
      • type - Тип пакета обновления (full - полное обновление или upgrade - частичное обновление)
      • format - Формат пакета (zip, tar, и т.д..)
  • tags -Список тегов отношение к этой версии. Joomla! 3.4 и старше используют их для установления "качества" обновления. Валидными будут следующие названия:
    • dev: Версия для разработчиков, очень не стабильна и является предварительной (иногда называют Ночная сборка)
    • alpha: Качество программного обеспечения Альфа (некоторые фичи не реализованы, показаны ошибки)
    • beta: Бета версия (весь функционал реализрован, возможен показ ошибок. Почти все ошибки из альфы устранены)
    • rc: Релиз кандидат (ошибки не показываются, незначительные ошибки могут по-прежнему присутствовать)
    • stable: Конечная версия (stable - пока единственный поддерживаемый вариант, все остальные игнорируются). Если вы опишите несколько тегов, то будет использован только последний. Если не прописали ни одного, то используется stable
  • maintainer - Имя разработчика, который поддерживает расширения (похоже на  <author>в манифесте) (опциональное)
  • maintainerurl - сайт поддержки расширения (похоже на <authorUrl>) (не обязательное)
  • section - не обязательное поле(неизвестно использование)
  • targetplatform - Используются для определения требований платформы, необходимы следующие элементы
      • name - название платформы, куда будет ставится расширение (сейчас поддерживается только "joomla")
      • version - версия Joomla, которую поддерживает расширение. 
      • min_dev_level и max_dev_level - Эти атрибуты были добавлены в версии 3.0.1 и позволяют они указать какую минимальную минорную версию Joomla и какую максимальную поддерживает расширение ("z" в x.y.z). Они не обязательные. Вы можете определить или один или оба. Если параметр не указан, то все версии в указанной мажорной, будут приняты. Для примера следующий код будет соответствовать только версии 4.0.0 и 4.0.1.
        <targetplatform name="joomla" version="4.0" min_dev_level="0" max_dev_level="1"/>
      • Важно: Если ваше расширение совместимо с  Joomla! 2.5 и/или 3.1, вам потребуется иметь отдельные теги <update>для каждой версии.Однако, чтобы показать свою расширение на всех версиях Joomla, которые поддерживают автоматическое обновление достаточно добавить <targetplatform name="joomla" version=".*"/>. Если вы хотите показать ваше расширение во всех Joomla 3.x версиях тогда вместо указания конкретной версии, укажите следующее <targetplatform name="joomla" version="3.[012345]"/>.Это покажет обновленную всех версий 3.x.
  • php_minimum - Начиная с 3.2.2, минимальная поддерживаемая версия php. Если на сайте разработчика будет версия ниже этой, то сообщение о новой версии приложения будет показано, но установить его будет нельзя. Будет выведено соответствующее предупреждение.

Отдельный  описание <update> будет необходимо для каждой версии расширения, которое вы выпустили.

Значения элементов type,client_id и folder должны соответствовать тем, которые указаны в таблице #__extensions.

Важное замечание для плагинов: Плагины должны включать <folder> и <client> элементы для правильной работы расширения

Поиск проблемы

  • SQL скрипт не выполняется во время обновления.
Если SQL скрипт обновления (для примераsql/updates/mysql) не выполняется во время процедуры обновления, это могло произойти потому что нет номера версии в таблице  #__schemas для этого расширения, до обновления. Это значение определяется последним обновленным SQL. Если это значение пусто, то SQL скрипт не будет запускаться. Поэтому SQL скрипты в своем названии должны содержать версию обновления. Файл может быть пустым или просто SQL строку комментария. Если вы не сделали этого, то ваше расширение не будет обновлять SQL. Поэтому если это произошло, то нужно в самом расширении выполнить SQL запрос и исправить таблицу #__shemas

Оставлять комментарии могут только зарегистрированные пользователи

Комментарии  

Сергей Милославский
# Сергей Милославский 21.12.2017 14:14
Очень хорошо! Молодец.
Всё сразу встало на свои места!!!

Единственное пожелание: у статей стоит дата создания (тут начало 2015 г.), и не понятно актуально это или нет... В сети много сайтов, за которыми никто не следит, было бы круто, если была бы ещё и дата модификации!

Добра и самодостаточности.