Разрботка расширений для CMS Joomla - Страница 34
Теги, задающие метаданные, такие как author, creationDate и другие, скопированы из файла /modules/mod_myquestions/mod_myquestions.xml.
Тег
Далее следует тег files со значением атрибута folder, равным site, т.е. описаны папки и файлы, которые находятся в папке siteустановочного пакета. Обратите внимание, что содержимое подпапок ( modelsи views) не описывается, указывается только имя подпапки.
Содержимое тега
Оставшуюся часть файла myquestions.xmlзанимает тег
Добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.sys.iniстроки:
COM_MYQUESTIONS="Моя система «вопрос – ответ»" COM_MYQUESTIONS_XML_DESCRIPTION="Моя система «вопрос – ответ»"
В папку adminскопируйте содержимое папки /administrator/components/com_myquestions, а в папку site- /components/com_myquestions.
Кроме того, создайте в папке siteпапку language, в ней - папку ru-RU. Скопируйте в нее файл ru-RU.com_myquestions.iniиз language/ru-RU.
Создайте в папке adminпапку language, в ней - папку ru-RUи скопируйте в нее файлы ru-RU.com_myquestions.sys.iniи ru-RU.com_myquestions.iniиз /administrator/language/ru-RU.
Наконец, создайте в папке adminподпапку sql, а в ней создайте файлы install.sqlи uninstall.sql.
Получившееся дерево папок показано на рис. 8.3.
Рис. 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:
Значения атрибутов тега
Описаны пять параметров модуля, три из которых - random, author и date - являются переключателями, а остальные два - items и maxlen - текстовыми полями. Для переключателей с помощью тега
Теперь создайте языковой файл для модуля /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="Выводить дату написания вопроса?"