Манифест для модуля
Настройки модуля
Создайте файл /modules/mod_myquestions/mod_myquestions.xml:
<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="1.7"> <name>mod_myquestions</name> <author>Me</author> <creationDate>2012</creationDate> <copyright>Copyright (C) 2012 Me</copyright> <license>GNU General Public License version 2 or later</license> <authorEmail>admin@mysite.ru</authorEmail> <authorUrl>www.mysite.ru</authorUrl> <version>1.7.0</version> <description>MOD_MYQUESTIONS_XML_DESCRIPTION</description> <config> <fields name="params"> <fieldset name="basic"> <field name="random" type="radio" default="0" label="MOD_MYQUESTIONS_RANDOMIZE_LABEL" description="MOD_MYQUESTIONS_RANDOMIZE_LABEL_DESC"> <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="items" type="text" default="1" label="MOD_MYQUESTIONS_ITEMS_LABEL" description="MOD_MYQUESTIONS_ITEMS_LABEL_DESC"/> <field name="maxlen" type="text" default="100" label="MOD_MYQUESTIONS_MAXLEN_LABEL" description="MOD_MYQUESTIONS_MAXLEN_LABEL_DESC"/> <field name="author" type="radio" default="1" label="MOD_MYQUESTIONS_AUTHOR_LABEL" description="MOD_MYQUESTIONS_AUTHOR_LABEL_DESC"> <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="date" type="radio" default="1" label="MOD_MYQUESTIONS_DATE_LABEL" description="MOD_MYQUESTIONS_DATE_LABEL_DESC"> <option value="0">JNO</option> <option value="1">JYES</option> </field> </fieldset> </fields> </config> </extension>
Значения атрибутов тега <extension> определяют, что расширение, для которого написан этот манифест, - это модуль и что он написан для Joomla 1.7.
Описаны пять параметров модуля, три из которых - random, author и date - являются переключателями, а остальные два - items и maxlen - текстовыми полями. Для переключателей с помощью тега <option> задаются все возможные значения.
Теперь создайте языковой файл для модуля /language/ru-RU/ru-RU.mod_myquestions.ini:
MOD_MYQUESTIONS_XML_DESCRIPTION="Выводит вопросы из системы Вопрос - ответ" MOD_MYQUESTIONS_RANDOMIZE_LABEL="Случайный вопрос" MOD_MYQUESTIONS_RANDOMIZE_LABEL_DESC="Выводить один случайный вопрос?" MOD_MYQUESTIONS_ITEMS_LABEL="Количество вопросов"; MOD_MYQUESTIONS_ITEMS_LABEL_DESC="Сколько вопросов выводить?" MOD_MYQUESTIONS_MAXLEN_LABEL="Длина вопроса" MOD_MYQUESTIONS_MAXLEN_LABEL_DESC="Сколько первых символов вопроса отображать?" MOD_MYQUESTIONS_AUTHOR_LABEL="Автор вопроса" MOD_MYQUESTIONS_AUTHOR_LABEL_DESC="Выводить имя автора?" MOD_MYQUESTIONS_DATE_LABEL="Дата вопроса" MOD_MYQUESTIONS_DATE_LABEL_DESC="Выводить дату написания вопроса?"
В панели управления перейдите в " Расширения" - " Менеджер модулей". Выберите из списка модуль " Новые вопросы", и в правой части открывшейся страницы будет отображена группа элементов формы для установки параметров модуля (рис. 8.4).
Рис. 8.4. Установка параметров модуля
Упаковка модуля
Для упаковки модуля добавьте в файл /modules/mod_myquestions/mod_myquestions.xmlвыделенный код:
(есть увеличенное изображение)
Создайте в папке /modules/mod_myquestionsпапку language, в ней - папку ru-RU. Скопируйте в нее файл ru-RU.mod_myquestions.iniиз папки language/ru-RU. Создайте файл /modules/mod_myquestions/language/ru-RU/ru-RU.mod_myquestions.sys.ini:
MOD_MYQUESTIONS="Новые вопросы" MOD_MYQUESTIONS_XML_DESCRIPTION="Выводит вопросы из системы Вопрос - ответ"
Создайте из содержимого папки /modules/mod_myquestionsархив mod_myquestions.zip. Это и есть установочный пакет для модуля. Обратите внимание, что в архиве должно находиться именно содержимое папки mod_myquestions, а не сама эта папка.
Ключевые термины
Манифест - файл XML, содержащий метаданные о расширении, данные для установки и/или описание его настроек.
Краткие итоги
Для каждого расширения Joomla может существовать файл-манифест, содержащий метаданные о расширении, данные для установки и/или описание его настроек. Манифест должен называться <имя расширения>.xmlи находиться в корневой директории установочного пакета.
Настройки расширения описаны для модулей непосредственно в манифесте, а для компонентов - в отдельном файле config.xmlв корневой директории бэкенда компонента.
Установочные пакеты для модуля и для компонента представляют собой ZIP-архивы определенной структуры.
Для компонента установочный пакет включает манифест и папки adminи site, содержащие файлы и папки бэкенда и фронтенда соответственно и, возможно, некоторые дополнительные файлы и папки, например, SQL-скрипты.
Для модуля установочный пакет просто включает все его папки и файлы.
Вопросы
Какие данные содержит манифест расширения Joomla?
Где описаны настройки модулей и компонентов?
Какова структура установочного пакет для модуля и для компонента?
Упражнения
Адаптируйте код из раздела " Практика" для своего варианта (см. список вариантов в дополнительных материалах).
Заключение
В рамках курса были рассмотрены основы программирования под CMS Joomla. Были предложены для изучения такие темы, как архитектура Joomla, работа с базой данных, генерация элементов HTML, организация иерархии пунктов меню, создание и отправка электронных писем, генерация SEF-ссылок, основы реализации архитектуры MVC с помощью Joomla, разработка простых модулей, организация постраничного вывода списков, управление навигационной цепочкой, создание манифестов расширений и установочных пакетов. Изучен ряд классов фреймворка Joomla. Таким образом, успешное освоение материалов данного курса достаточно для разработки небольших компонентов и модулей для Joomla.
Общий глоссарий
JAdministrator- приложение, управляющее функциями для администрирования Joomla. JApplication- класс, позволяющий работать с очередью сообщений, осуществлять перенаправление браузера, получать параметры конфигурации сайта, определять тип запущенного приложения Joomla. JController- абстрактный класс для реализации контроллеров. JDatabase- абстрактный класс, предоставляющий доступ к соединению с базой данных, создающемуся при инициализации приложения Joomla. JDatabaseQuery- класс, методы которого совпадают с ключевыми словами языка SQL и позволяют упростить создание сложных SQL-запросов. JDate- класс для работы с датами. JDocument- класс для работы с документом. JEditor- класс для работы с WYSIWYG-редактором. JError- класс для работы с ошибками. JFactory- класс Joomla, реализующий паттерн "фабрика" и позволяющий получить доступ к глобальным объектам фреймворка. JHTML- класс для вывода элементов XHTML. JHTMLBehavior- поддерживающий класс, который позволяет вывести календарь, дерево элементов, файловый загрузчик и некоторые другие элементы управления. JHTMLEmail- поддерживающий класс, содержащий метод для скрытия адреса электронной почты в целях его защиты от спам-ботов. JHTMLForm- поддерживающий класс, содержащий метод, который возвращает код скрытого поля формы для уменьшения риска CSRF-атак. JHTMLGrid- поддерживающий класс, позволяющий вывести в таблице в панели управления такие элементы, как чекбокс, пиктограмма для переключения состояния "опубликовано"/"не опубликовано", отобразить заголовок столбца как ссылки для сортировки по этому столбцу и др. JHTMLImage- поддерживающий класс, содержащий методы для поиска изображения в фронтенде и бэкенде. JHTMLList- поддерживающий класс для создания списков некоторых конкретных значений. JHTMLSelect- поддерживающий класс для генерации кода списков. JInstallation- приложение, которое запускается при установке Joomla. JMail- класс для создания и отправки электронных писем. JMailHelper- класс для очистки данных перед добавлением к электронному письму и проверки, является ли заданная строка корректным адресом электронной почты. JModel- абстрактный класс для реализации моделей. JPagination- класс для вывода элементов формы для разбивки на страницы списков элементов. JPathway- класс для управления навигационной цепочкой. JRequest- класс Joomla, использующийся для работы с переменными HTTP-запроса. JRoute- класс для создания SEF-ссылок. JSite- приложение, отвечающее за компоновку и отображение фронтенда. JTable- класс, реализующий паттерн Active Record и использующийся для управления таблицами базы данных. JToolBarHelper- класс Joomla, содержащий методы, которые генерируют HTML-код для построения кнопок панелей инструментов. JURI- класс для работы с URI. JUser- класс для работы с данными о пользователе. JView- абстрактный класс для реализации представлений. XML-RPC- приложение, позволяющее администрировать сайт Joomla удаленно. Библиотека- файл, который требуется для работы фреймворка или сторонних расширений. Бэкенд- система администрирования сайта. Документ- буфер, использующийся для хранения содержимого веб-страницы, которая будет показана пользователю после выполнения запроса. Иерархия пунктов меню- дерево, состоящее из пунктов меню и организованное с помощью вложенных множеств. Ключ- эквивалент текста, подлежащего переводу. Компонент- основной тип расширений Joomla, вызов которого происходит при каждом обращении к Joomla. Манифест- файл XML, содержащий метаданные о расширении, данные для установки и/или описание его настроек. Модуль- расширение Joomla, использующееся для отображения небольших фрагментов контента, обычно в левой или правой колонке или верхней или нижней областях страницы. Основной метод класса JHTML- метод JHTML::_(), который вызывает метод, определяющийся его первым параметром, и передает ему свои остальные параметры. Очередь сообщений- массив строк, которые будут выведены на экран при следующей загрузке какой-либо страницы. Перевод- строка, содержащая перевод текста, соответствующего заданному ключу, на какой-либо язык. Плагин- расширение Joomla, позволяющее зарегистрировать функции и классы для обработки каких-либо событий, вызванных Joomla, например, поиск по сайту. Поддерживающие классы- классы для вывода элементов XHTML и поведений Javascript. Префикс таблиц базы данных- строка, которая присоединяется к названию каждой таблицы Joomla в базе данных. Приложение- глобальный объект, использующийся для обработки запросов. Реальный префикс- то конкретное сочетание символов, которое используется в названиях таблиц базы данных. Регистрация задачи- сопоставление ее какому-либо методу класса, производного от JController. Связывание- процесс присвоения каждому полю производного от JTable класса значения элемента массива переменных запроса, так что ключ элемента совпадает с названием поля. Символический префикс- сочетание "#__" (решетка и два знака подчеркивания), которое используется в запросах вместо реального префикса. Уровень приложения- часть архитектуры Joomla, которая состоит из приложений, расширяющих абстрактный класс JApplication. Уровень расширений- часть архитектуры Joomla, которая состоит из расширений фреймворка Joomla и приложений. Уровень фреймворка- часть архитектуры Joomla, которая обеспечивает ее базовую функциональность с помощью набора библиотек и плагинов и собственно ядра Joomla. Фреймворк Joomla ("ядро")- набор классов, обеспечивающих базовую функциональность Joomla (JDatabase, JUser, JForm, JEditor и т.д.). Фронтенд- часть сайта, доступная пользователю. Функция генерации SEF-ссылок- функция, которая принимает массив элементов HTTP-запроса и возвращает массив сегментов SEF-ссылки. Функция декодирования SEF-ссылок- функция, которая из массива сегментов SEF-ссылки создает массив переменных HTTP-запроса. Шаблон- расширение Joomla, отвечающее за внешний вид сайта. Шаблон SEF-ссылок- последовательность сегментов. Языковый файл- расширение Joomla, позволяющее представить ее контент на нескольких языках.