Рис. 1.7. Пункт меню в бэкенде
Теперь создайте пункт меню фронтенда. Для этого зайдите в " Меню" - " Менеджер меню", нажмите на ссылку " Главное меню", а затем на кнопку " Создать". Выберите тип пункта меню " Внешний URL", в поле " Заголовок меню" введите " Моя система "вопрос - ответ"", а в поле " Ссылка" - ссылку на фронтенд нашего компонента: ссылка: http://localhost/joomla/index.php?option=com_myquestionsи нажмите " Сохранить". Обновите любую страницу фронтенда и убедитесь, что появился новый пункт меню (рис. 1.8).
(есть увеличенное изображение)
Рис. 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);
Ваш файл CSS необходимо подключить в файле admin.myquestions.phpследующим образом:
JHTML::stylesheet('delete.css', 'administrator/components/com_myquestions/');
Предполагается, что файлы delete.cssи icon-32-myiconfile.pngнаходятся в папке /administrator/components/com_myquestions/.
Ключевые термины
JAdministrator - приложение, управляющее функциями для администрирования Joomla. JApplication - класс, позволяющий работать с очередью сообщений, осуществлять перенаправление браузера, получать параметры конфигурации сайта, определять тип запущенного приложения Joomla. JFactory - класс Joomla, реализующий паттерн "фабрика" и позволяющий получить доступ к глобальным объектам фреймворка. JInstallation - приложение, которое запускается при установке Joomla. JRequest - класс Joomla, использующийся для работы с переменными HTTP-запроса. JSite - приложение, отвечающее за компоновку и отображение фронтенда. JToolBarHelper - класс Joomla, содержащий методы, которые генерируют HTML-код для построения кнопок панелей инструментов. XML-RPC - приложение, позволяющее администрировать сайт Joomla удаленно. Библиотека - файл, который требуется для работы фреймворка или сторонних расширений. Бэкенд - система администрирования сайта. Ключ - эквивалент текста, подлежащего переводу. Компонент - основной тип расширений Joomla, вызов которого происходит при каждом обращении к Joomla. Модуль - расширение Joomla, использующееся для отображения небольших фрагментов контента, обычно в левой или правой колонке или верхней или нижней областях страницы. Очередь сообщений - массив строк, которые будут выведены на экран при следующей загрузке какой-либо страницы. Перевод - строка, содержащая перевод текста, соответствующего заданному ключу, на какой-либо язык. Плагин - расширение Joomla, позволяющее зарегистрировать функции и классы для обработки каких-либо событий, вызванных Joomla, например, поиск по сайту. Приложение - глобальный объект, использующийся для обработки запросов. Уровень приложения - часть архитектуры Joomla, которая состоит из приложений, расширяющих абстрактный класс JApplication. Уровень расширений - часть архитектуры Joomla, которая состоит из расширений фреймворка Joomla и приложений. Уровень фреймворка - часть архитектуры Joomla, которая обеспечивает ее базовую функциональность с помощью набора библиотек и плагинов и собственно ядра Joomla. Фреймворк Joomla ("ядро") - набор классов, обеспечивающих базовую функциональность Joomla (JDatabase, JUser, JForm, JEditor и т.д.). Фронтенд - часть сайта, доступная пользователю. Шаблон - расширение Joomla, отвечающее за внешний вид сайта. Языковый файл - расширение Joomla, позволяющее представить ее контент на нескольких языках.