Добавить в цитаты Настройки чтения

Страница 33 из 38



Практика

В таблицах #__extensions и #__modules, в которые мы добавляли записи о наших расширениях, есть поле params, позволяющий хранить значения параметров. Например, для модуля mod_myquestions в этом поле хранится значение наподобие {"random":"0","items":"3","maxlen":"100","author":"1","date":"1"}. Нетрудно заметить, что данная строка представляет собой совокупность пар " ключ - значение". Таким образом, заданные значения настроек расширений сохраняются в базе данных. Наша задача - предоставить администратору сайта интерфейс для изменения этих значений.

Кроме того, мы создадим установочные пакеты для модуля и для компонента, представляющие собой ZIP-архивы определенной структуры.

Манифест для компонента

Настройки компонента

Зададим два параметра компонента myquestions - адреса электронной почты администратора сайта и эксперта.

Создайте файл /administrator/components/com_myquestions/config.xml:

<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="component" label="COM_MYQUESTIONS_FIELDSETCONFIG_LABEL" description="COM_MYQUESTIONS_FIELDSETCONFIG_LABEL_DESC"> <field name="email_admin" type="text" label="COM_MYQUESTIONS_FIELD_EMAILADMIN_LABEL" description="COM_MYQUESTIONS_FIELD_EMAILADMIN_LABEL_DESC" default="[email protected] /* */"/> <field name="email_expert" type="text" label="COM_MYQUESTIONS_FIELD_EMAILEXPERT_LABEL" description="COM_MYQUESTIONS_FIELD_EMAILEXPERT_LABEL_DESC" default="[email protected] /* */"/> </fieldset> </config>

Добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.iniкод:

COM_MYQUESTIONS_CONFIGURATION="Настройки системы «вопрос – ответ»" COM_MYQUESTIONS_FIELDSETCONFIG_LABEL="Настройки системы" COM_MYQUESTIONS_FIELDSETCONFIG_LABEL_DESC="Настройки системы" COM_MYQUESTIONS_FIELD_EMAILADMIN_LABEL="E-mail администратора" COM_MYQUESTIONS_FIELD_EMAILADMIN_LABEL_DESC="На этот адрес будут приходить уведомления о новых вопросах, и с этого адреса будут отправляться уведомления экспертам и пользователям" COM_MYQUESTIONS_FIELD_EMAILEXPERT_LABEL="E-mail эксперта" COM_MYQUESTIONS_FIELD_EMAILEXPERT_LABEL_DESC="На этот адрес будут приходить уведомления о новых вопросах, отправленные модератором"

Для отображения в панели инструментов кнопки " Настройки" используется метод JToolBarHelper::preferences(). Измените функцию TOOLBAR_myquestions::_DEFAULT() в файле /administrator/components/com_myquestions/toolbar.myquestions.html.phpследующим образом:

function _DEFAULT() { JToolBarHelper::title(JText::_('COM_MYQUESTIONS_TOOLBAR_TITLE'), 'generic.png'); JToolBarHelper::editList('reply','COM_MYQUESTIONS_REPLY'); JToolBarHelper::deleteList(JText::_('COM_MYQUESTIONS_TOOLBAR_REMOVE_QUESTIONS_CONFIRMATION')); JToolBarHelper::preferences('com_myquestions'); }

Теперь на панели инструментов над списком вопросов появилась кнопка " Настройки", при нажатии на которую выводится окно, в котором можно задавать значения настроек компонента (рис. 8.2).



(есть увеличенное изображение)

Рис. 8.2.  Кнопка "Настройки" в панели инструментов

Внесем изменения в код компонента, чтобы использовать значения настроек. Измените код функции QuestionController::send() в файле /administrator/components/com_myquestions/controller.phpследующим образом:

$mailer =& JFactory::getMailer(); $params = JComponentHelper::getParams($option); $mailer->setSender($params->get('email_admin','[email protected] /* */')); if ($task == 'sendToExpert') { $mailer->addRecipient($params->get('email_expert','[email protected] /* */')); $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','[email protected] /* */')); $mailer->addRecipient($params->get('email_admin','[email protected] /* */')); …

Задайте с помощью кнопки " Настройки" собственные значения адресов электронной почты администратора сайта и эксперта. Добавьте на сайт вопрос, отправьте уведомление о нем эксперту, об ответе - автору вопроса и убедитесь, что в папке <путь к Денверу>/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>[email protected] /* */</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> Листинг .