Разрботка расширений для CMS Joomla
Шрифт:
Рис. 8.3. Дерево папок установочного пакета
В файл install.sqlвставьте код
DROP TABLE IF EXISTS `#__myquestions`; DROP TABLE IF EXISTS `#__myquestions_categories`; CREATE TABLE `#__myquestions` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `date` DATETIME NOT NULL, `question` TEXT NOT NULL, `city` VARCHAR(50) NULL, `email` VARCHAR(50) NOT NULL, `IP` VARCHAR(15) NOT NULL, `id_cat` INT NOT NULL, `published` TINYINT(1) NULL DEFAULT '1', `expiration_date` DATETIME NULL DEFAULT '0000-00-00 00:00:00', `senttoexpert` TINYINT(1) NULL DEFAULT '0', `answer` TEXT NULL DEFAULT '', `senttoauthor` TINYINT(1) NULL DEFAULT '0' ); CREATE TABLE `#__myquestions_categories` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `desc` TEXT NOT NULL DEFAULT '' ); INSERT INTO `#__myquestions_categories`(`name`, `desc`) VALUES('Без
В сущности, это тот самый код, который использовался нами ранее для создания таблиц, но вместо реального префикса таблиц указан символический. До создания таблиц мы выполняем запросы для удаления таблиц с теми же названиями, если они существуют, чтобы избежать ошибок при переустановке компонента.
В таблицу #__myquestions_categories сразу же вставляется запись для категории под названием " Без категории". Так как таблица только что создана, эта запись получит id, равный 1, то совпадающий с id категории, который в нашем компоненте присваивается новому вопросу при добавлении.
Запросы из скрипта uninstall.sqlудаляют обе таблицы:
DROP TABLE `#__myquestions`; DROP TABLE `#__myquestions_categories`;
Упакуйте папки admin, siteи файл myquestions.xmlв архив com_myquestions.zip. Установочный пакет компонента готов. Для проверки его работоспособности создайте новую установку Joomla и установите на нее ваш компонент с помощью менеджера расширений в панели управления.
Манифест для модуля
Настройки модуля
Создайте файл /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?
Где описаны настройки модулей и компонентов?
Какова структура установочного пакет для модуля и для компонента?
Упражнения
Адаптируйте код из раздела " Практика" для своего варианта (см. список вариантов в дополнительных материалах).
Заключение