Шрифт:
(есть увеличенное изображение)
Рис. 1.8. Пункт меню во фронтенде
Создание панелей инструментов
Вспомните приведенное выше описание функционала, доступного администратору нашей системы. Соответственно, на панели инструментов для управления списком вопросов необходимы следующие кнопки:
отправить уведомление о вопросе эксперту по электронной почте;
присвоить вопросу категорию;
отправить ответ автору вопроса по электронной почте;
редактировать вопрос (в том числе: задать дату снятия вопроса с публикации; скрыть от посетителей сайта отдельные поля вопроса; ответить на вопрос);
удалить вопрос.
Для начала создайте файл /administrator/components/com_myquestions/toolbar.myquestions.html.php:
<?php defined('_JEXEC') or die('Restricted access'); class TOOLBAR_myquestions { function _REPLY { JToolBarHelper::title(JText::_('COM_MYQUESTIONS_TOOLBAR_TITLE'), 'generic.png'); JToolBarHelper::custom('sendToExpert', 'send.png', '', 'COM_MYQUESTIONS_TOOLBAR_SEND_TO_EXPERT', false); JToolBarHelper::custom('sendAnswer', 'send.png', '', 'COM_MYQUESTIONS_TOOLBAR_SEND_ANSWER', false); JToolBarHelper::save; JToolBarHelper::apply; JToolBarHelper::cancel; } 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')); } } ?>
Каждая функция класса TOOLBAR_myquestions соответствует отдельной панели инструментов. Как видите, мы задали две такие панели - первая из них будет отображаться над формой для ответа на вопрос, а вторая - над списком вопросов.
В коде, приведенном выше для ряда кнопок вместо стандартных подписей задаются собственные, которые необходимо перевести в языковом файле вместе с другими надписями. Поэтому создадим языковой файл /administrator/language/ru-RU/ru-RU.com_myquestions.ini:
COM_MYQUESTIONS_TOOLBAR_SEND_TO_EXPERT="Отправить эксперту" COM_MYQUESTIONS_TOOLBAR_SEND_ANSWER="Отправить ответ" COM_MYQUESTIONS_TOOLBAR_TITLE="Моя система «вопрос – ответ»" COM_MYQUESTIONS_REPLY="Ответить / Редактировать" COM_MYQUESTIONS_TOOLBAR_REMOVE_QUESTIONS_CONFIRMATION="Вы действительно хотите удалить эти вопросы?"
Добавим код, который будет выбирать, какую из определенных нами панелей инструментов отображать. Создайте файл /administrator/components/com_myquestions/toolbar.myquestions.php:
<?php defined('_JEXEC') or die('Restricted access'); require_once(JApplicationHelper::getPath('toolbar_html')); switch($task) { case 'reply': TOOLBAR_myquestions::_REPLY; break; default: TOOLBAR_myquestions::_DEFAULT; break; } ?>
Вызов функции getPath класса JApplicationHelper позволяет обратиться к файлу toolbar.myquestions.html.phpбез указания имени компонента, что удобно, если впоследствии понадобится изменить это имя.
Выражение switch используется для выбора одной из панелей инструментов в зависимости от значений переменной $task.
Обратите внимание, что код распределен по двум файлам - toolbar.myquestions.phpи toolbar.myquestions.html.php, чтобы отделить логику обработки от непосредственного вывода информации.
Обновите страницу в бэкенде и выберите в меню " Компоненты" пункт " Моя система "вопрос - ответ"". Результат должен быть таким же, как на рис. 1.9.
(есть увеличенное изображение)
Рис. 1.9. Первая панель инструментов
Чтобы увидеть другую панель инструментов, добавьте строку &task=reply в конец URL: ссылка: http://localhost/joomla/administrator/index.php?option=com_myquestions&task=reply(рис. 1.10).
(есть увеличенное изображение)
Рис. 1.10. Вторая панель инструментов
Каждая кнопка панели инструментов соответствует некоторой задаче. Когда пользователь нажимает на какую-либо кнопку, соответствующая задача добавляется к форме, и эта форма автоматически отправляется. Поскольку самих форм мы еще не создали, кнопки не работают.
Чтобы использовать для кнопки свою картинку, необходимо создать файл CSS, содержащий подобное выражение:
.icon-32-myiconname { background-image: url(icon-32-myiconfile.png); }
Класс JToolBarHelper будет искать для заданного значения iconname класс .icon-32- iconname. Название файла должно начинаться с "icon-32-".
В таком случае вызов функции JToolBarHelper::custom будет выглядеть так:
JToolBarHelper::custom('someFunction', 'myiconname.png', '', 'Альтернативный текст', false, false);