Разрботка расширений для CMS Joomla
Шрифт:
(есть увеличенное изображение)
Рис. 1.5. Первый результат в бэкенде
Добавим эти ссылки в меню фронтенда и бэкенда. Для этого выясним, какой idбыл присвоен нашему компоненту в таблице jos_extensions. В phpMyAdminвойдите в эту таблицу и найдите расширение com_myquestions. Вероятно, оно находится в последней строке. Посмотрите, какое значение стоит в поле extension_id. Например, на рис. 1.6 видно, что в данном
(есть увеличенное изображение)
Рис. 1.6. Определение id компонента
Теперь выполните SQL-запрос, не забыв заменить "10006" на найденный вами id:
INSERT INTO `jos_menu`(`menutype`, `title`, `alias`, `path`, `link`, `type`, `level`, `component_id`, `access`, `img`, `params`, `client_id`) VALUES('menu', 'com_myquestions_menu', 'My Questions', 'My Questions', 'index.php? option=com_myquestions', 'component', 1, 10006, 1, 'class:component', '', 1);
После выполнения данного запроса в меню " Компоненты" бэкенда появится новый подпункт со ссылкой на наш компонент. Однако он будет называться " myquestions", так как мы еще не задали перевод для строки com_myquestions_menu. Чтобы задать его, создайте языковой файл /administrator/language/ru-RU/ru-RU.com_myquestions.sys.iniследующего содержания:
COM_MYQUESTIONS_MENU="Моя система «вопрос – ответ»"
Зайдите в бэкенд. В меню " Компоненты" появился пункт " Моя система "вопрос - ответ"" (рис. 1.7).
Рис. 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. Вторая панель инструментов
Каждая кнопка панели инструментов соответствует некоторой задаче. Когда пользователь нажимает на какую-либо кнопку, соответствующая задача добавляется к форме, и эта форма автоматически отправляется. Поскольку самих форм мы еще не создали, кнопки не работают.