Разрботка расширений для CMS Joomla
Шрифт:
Внутри тега <extension> в первую очередь обычно задаются метаданные: <name>, <author>, <copyright>, <license>, <authorEmail>, <authorUrl>, <version>, <description>, однако их можно опустить.
Элемент <scriptfile> задает PHP-скрипт, который будет выполнен до, во время и/или после установки, удаления или обновления расширения. Этот скрипт должен содержать класс <префикс><имя расширения>IntallerScript, где префикс зависит от типа расширения (com_, mod_ и т.д.). Данный класс должен содержать
__constructor(JAdapterInstance $adapter); bool preflight(string $route, JAdapterInstance $adapter); bool postflight(string $route, JAdapterInstance $adapter); bool install(JAdapterInstance $adapter); bool update(JAdapterInstance $adapter); bool uninstall(JAdapterInstance $adapter);
где
adapter - объект, отвечающий за запуск этого скрипта; $route - какое событие происходит: install, uninstall, discover_install. Событие discover_install происходит при поиске расширений из менеджера расширений в панели управления (эта функция Joomla позволяет установить расширения, файлы которых предварительно были загружены на сайт вручную).
Методы preflight и postflight будут вызваны соответственно до и после установки/удаления/обновления расширения.
Элементы <install> и <uninstall> задают SQL-скрипты, которые должны быть выполнены при установке и удалении расширения. Таким путем в базе данных создаются таблицы, хранящие данные, использующиеся расширением. Атрибут folder задает папку, в которой находятся эти скрипты в установочном пакете, например, "admin". В эти элементы должен быть вложен элемент <sql>, содержащий по одному элементу <file> для каждого файла SQL. Атрибуты тега <file>: driver - драйвер базы данных и charset - кодировка базы данных. Например:
<install> <sql> <file driver="mysql" charset="utf8">sql/install.sql</file> </sql> </install> <uninstall> <sql> <file driver="mysql" charset="utf8" folder="sql">sql/uninstall.sql</file> </sql> </uninstall>
Элемент <files> задает список файлов, которые должны быть скопированы при установке расширения в соответствующую директорию во фронтенде. Для каждого файла добавляется вложенный элемент <filename>, для каждой папки - <folder>, причем содержимое папки уже не описывается. Пример для типичного компонента MVC:
<files folder="site"> <folder>models</folder> <folder>views</folder> <folder>controllers</folder> <filename>mycomponent.php</filename> <filename>router.php</filename> </files>
Языковые файлы описываются внутри элемента <languages>. В установочном пакете эти файлы должны находиться в папке /language/<код языка>. Для каждого из них создается вложенный элемент <language> с атрибутом tag, содержащим код языка в формате <ln-LN>:
<languages folder="site"> <language tag="ru-RU">language/ru-RU/ru-RU.com_mycomponent.ini</language> </languages>
Медиа-файлы - изображения, файлы Javascript и CSS, флэш - описываются внутри элемента <media>. Атрибут destination задает
<media destination="com_mycomponent"> <folder>css</folder> <folder>images</folder> <folder>js</folder> <filename>pic1.jpg</filename> </media>
Файлы-манифесты компонентов могут включать элемент <administration>. Он содержит такие же элементы <languages> и <files>, как и описанные ранее, а также элементы для описания меню компонента в панели управления: <menu> и <submenu>.
Элемент <menu>, вложенный непосредственно в <administration>, описывает пункт в меню " Компоненты", ссылающийся на главную страницу бэкенда компонента. Атрибутом может быть img - относительный путь к пиктограмме пункта меню (по умолчанию будет присвоено значение "class:component").
Элемент <submenu> может содержать несколько вложенных элементов <menu>, описывающих подпункты этого пункта меню. У таких вложенных тегов <menu> может быть несколько атрибутов, среди которых в первую очередь отметим img и link - ссылка, переход по которой произойдет при щелчке на данном пункте меню. Если ссылка задана, то итоговый URL будет сформирован как index.php?<ссылка>. Если же атрибут link не задан, то установщик проверит наличие следующих атрибутов этого же тега: act, task, controller, view, layout, sub и добавит к строке "index.php?option=com_<имя компонента>&" соответствующие пары "имя-значение", разделенные амперсандом. Например, следующие элементы описывают пункт меню с одной и той же ссылкой index.php?option=com_mycomponent&task=edit:
<menu task="edit">COM_MYCOMPONENT_EDIT</menu> <menu link="option=com_mycomponent&task=edit">COM_MYCOMPONENT_EDIT</menu>
Текст пункта меню задается внутри тега <menu> и обязательно должен быть ключом, значение которого должно быть переведено в языковом файле, обычно - /administrator/languages/<код языка>/<код языка>.com_<имя компонента>.sys.ini.
Элемент <config> описывает настройки расширения. Обратите внимание, что для компонентов этот элемент должен находиться не в файле-манифесте, а в отдельном файле config.xmlв корневой директории бэкенда компонента. Для модулей <config> располагается в файле-манифесте и вложен в тег <extension>.
В <config> может быть вложен элемент <fields>. Его атрибут addfieldpath позволяет задать папку, в которой находится файл, определяющий собственный тип поля.
В <fields> или непосредственно в <config> вложен элемент <fieldset>, соответствующий HTML-элементу <fieldset>. Каждый <fieldset> - это группа элементов формы редактирования свойств расширения, например: " Основные настройки", " Расширенные настройки" и т.д. Атрибут name задает имя этого элемента, label - отображаемый текст.