Выбрать главу

$mailer =& JFactory::getMailer(); $params = JComponentHelper::getParams($option); $mailer->setSender($params->get('email_admin','admin@mysite.ru')); if ($task == 'sendToExpert') { $mailer->addRecipient($params->get('email_expert','expert@mysite.ru')); $mailer->setSubject(JText::_('COM_MYQUESTIONS_NEW_QUESTION')); $mailer->setBody(JText::sprintf('COM_MYQUESTIONS_EMAIL_EXPERT_BODY',$q)); }

С помощью метода JComponentHelper::getParams() мы получаем объект JParameter, а затем используем его метод get() для получения параметров, задавая значения по умолчанию.

Изменим также код фронтенда. Откройте файл /components/com_myquestions/controller.phpи измените функцию QuestionController::addQuestion() следующим образом:

… $mailer =& JFactory::getMailer(); $option = JRequest::getVar('option','com_myquestions'); $params = JComponentHelper::getParams($option); $mailer->setSender($params->get('email_admin','admin@mysite.ru')); $mailer->addRecipient($params->get('email_admin','admin@mysite.ru')); …

Задайте с помощью кнопки " Настройки" собственные значения адресов электронной почты администратора сайта и эксперта. Добавьте на сайт вопрос, отправьте уведомление о нем эксперту, об ответе - автору вопроса и убедитесь, что в папке <путь к Денверу>/tmp/!sendmailпоявилось три письма с заданными вами значениями адресов электронной почты в соответствующих полях.

Упаковка компонента

Создайте в любом месте на диске новую папку, а в ней - папки adminи site, а также файл myquestions.xml:

<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="1.7"> <name>com_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>COM_MYQUESTIONS_XML_DESCRIPTION</description> <install folder="admin"> <sql> <file driver="mysql" charset="utf8">sql/install.sql</file> </sql> </install> <uninstall folder="admin"> <sql> <file driver="mysql" charset="utf8">sql/uninstall.sql</file> </sql> </uninstall> <files folder="site"> <filename>controller.php</filename> <filename>myquestions.html.php</filename> <filename>myquestions.php</filename> <filename>router.php</filename> <folder>models</folder> <folder>views</folder> </files> <languages folder="site"> <language tag="ru-RU">language/ru-RU/ru-RU.com_myquestions.ini</language> </languages> <administration> <menu img="class:component">COM_MYQUESTIONS_MENU</menu> <submenu> <menu img="class:component" link="option=com_myquestions">COM_MYQUESTIONS_MENU_QUESTIONS</menu> <menu img="class:component" link="option=com_myquestions&task=showcat">COM_MYQUESTIONS_MENU_CATEGORIES</menu> </submenu> <files folder="admin"> <filename>admin.myquestions.html.php</filename> <filename>admin.myquestions.php</filename> <filename>config.xml</filename> <filename>controller.php</filename> <filename>toolbar.myquestions.html.php</filename> <filename>toolbar.myquestions.php</filename> <folder>tables</folder> <folder>sql</folder> </files> <languages folder="admin"> <language tag="ru-RU">language/ru-RU/ru-RU.com_myquestions.ini</language> <language tag="ru-RU">language/ru-RU/ru-RU.com_myquestions.sys.ini</language> </languages> </administration> </extension> Листинг .

Теги, задающие метаданные, такие как author, creationDate и другие, скопированы из файла /modules/mod_myquestions/mod_myquestions.xml.

Тег <install> задает SQL-файл, который будет выполнен при установке компонента. Обратите внимание, что явно указана его кодировка - utf-8 и, следовательно, этот файл нужно будет сохранить в указанной кодировке. Заметьте также, что тег <install> имеет атрибут folder со значением admin, что означает, что инсталлятор будет искать SQL-файл в папке adminустановочного пакета. Кроме того, файл задан как sql/install.sql, то есть он находится в папке sqlвнутри папки admin. Тег <uninstall> имеет аналогичное содержимое.

Далее следует тег files со значением атрибута folder, равным site, т.е. описаны папки и файлы, которые находятся в папке siteустановочного пакета. Обратите внимание, что содержимое подпапок ( modelsи views) не описывается, указывается только имя подпапки.

Содержимое тега <languages> описывает языковые файлы. Так как задан атрибут site, то эти файлы будут скопированы из папки siteустановочного пакета.

Оставшуюся часть файла myquestions.xmlзанимает тег <administration>. Вложенные в него теги <files> и <languages> аналогичны тегам, описывавшим фронтенд, за исключением атрибутов folder, имеющих значение admin. Тег <menu> описывает пункт меню, который появится в меню " Компоненты" панели управления, а также два его подпункта. Обратите внимание, что при задании ссылок для пунктов меню вместо амперсанда необходимо указывать его HTML-эквивалент &.

Добавьте в файл /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 и установите на нее ваш компонент с помощью менеджера расширений в панели управления.