Чтение онлайн

на главную - закладки

Жанры

Разрботка расширений для CMS Joomla
Шрифт:

Вложенные в <fieldset> элементы <field> задают поля формы. Каждый <field> соответствует одной настройке расширения. Допустимые атрибуты:

name - имя type - тип default - значение по умолчанию label - текст, который будет выводиться рядом с соответствующим элементом управления на форме description - описание, которое будет выводиться во всплывающей подсказке.

Некоторые стандартные типы полей:

calendar - текстовое поле, рядом с которым выводится пиктограмма для вывода календаря; category - выпадающий список категорий; editors - выпадающий список доступных WYSIWYG-редакторов; filelist - выпадающий список файлов из заданной директории; folderlist - выпадающий

список папок из заданной директории; imagelist - выпадающий список файлов изображений из заданной директории; languages - выпадающий список установленных языковых файлов фронтенда или бэкенда; list - выпадающий список каких-либо строк; password - поле для ввода пароля; radio - переключатель; spacer - разделитель; sql - выпадающий список элементов, полученных в результате выполнения заданного SQL-запроса; text - текстовое поле; textarea - многострочное текстовое поле; timezones - список часовых поясов.

Для списков и переключателей в тег <field> должны быть вложены несколько элементов <option>, задающих значения, из которых пользователь может выбрать.

Например, так описывается выпадающий список для выбора порядка сортировки - по возрастанию или по убыванию:

<field name="entries_order" type="list" default="DESC" label="COM_MYCOMPONENT_ENTRIES_ORDER" description="COM_MYCOMPONENT_ENTRIES_ORDER_DESC"> <option value="DESC">COM_MYCOMPONENT_ENTRIES_ORDER_DESC</option> <option value="ASC">COM_MYCOMPONENT_ENTRIES_ORDER_ASC</option> </field>

Для таких элементов, как filelist, folderlist, imagelist, вложенные элементы <option> не нужны, т.к. список значений определяется исходя из атрибутов этих тегов. Например, выпадающий список для выбора одного из доступных WYSIWYG-редакторов описывается так:

<field name="editors" type="editors" label="COM_MYCOMPONENT_EDITOR" />

Для создания собственного типа поля необходимо создать файл <имя типа>.phpи в нем описать класс, производный от одного из классов подпакета Form: JFormFieldList, JFormFieldMedia и др. (полный ссылка: список классовhttp://docs.joomla.org/Subpackage_Form/1.6см. в документации). В классе должен быть перегружен метод родительского класса, отвечающий за вывод поля формы. Простой ссылка: примерhttp://docs.joomla.org/Developing_a_Model-View-Controller_%28MVC%29_Component_for_Joomla!2.5_-_Part_06приведен в документации Joomla.

Практика

В таблицах #__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появилось три письма с заданными вами значениями адресов электронной почты в соответствующих полях.

Поделиться:
Популярные книги

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Барон Дубов

Карелин Сергей Витальевич
1. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Завод-3: назад в СССР

Гуров Валерий Александрович
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Завод-3: назад в СССР

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Отдельный танковый

Берг Александр Анатольевич
1. Антиблицкриг
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Отдельный танковый

Метатель. Книга 3

Тарасов Ник
3. Метатель
Фантастика:
попаданцы
альтернативная история
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель. Книга 3

Боярышня Евдокия

Меллер Юлия Викторовна
3. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Евдокия