Разрботка расширений для CMS Joomla - Страница 16
Теперь добавим обработку всех перечисленных в файле toolbar.myquestions.html.phpзадач. Откройте файл admin.myquestions.phpи добавьте в переключатель switch код:
case 'addcat': case 'editcat': editCategory($option); break; case 'savecat': case 'applycat': saveCategory($option, $task); break; case 'removecat': removeCategories($option); break;
Добавьте перечисленные функции в файл admin.myquestions.php:
function editCategory($option) { $row =& JTable::getInstance('Category','Table'); $cid = JRequest::getVar('cid', array(0), '', 'array'); $id = $cid[0]; $row->load($id); HTML_questions::editCategory($row, $option); } function saveCategory($option, $task) { $row =& JTable::getInstance('category', 'Table'); if (!$row->bind(JRequest::get('post'))) { echo "n"; exit(); } $row->desc = JRequest::getVar('desc', '', 'post', 'string', JREQUEST_ALLOWRAW); if (!$row->store()) { echo "n"; exit(); } global $app; if ($task == 'savecat') $app->redirect('index.php?option='.$option.'&task=showcat', JText::_('COM_MYQUESTIONS_CATEGORY_SAVED')); else if ($task == 'applycat') $app- >redirect('index.php?option='.$option.'&task=editcat&cid[]='.$row- >id, JText::_('COM_MYQUESTIONS_CATEGORY_SAVED')); } function removeCategories($option) { global $app; $cid = JRequest::getVar('cid', array(), '', 'array'); $db =& JFactory::getDbo(); if(count($cid)) { $cids = implode(',', $cid); $query = "DELETE FROM #__myquestions_categories WHERE id IN ($cids)"; $db->setQuery($query); if (!$db->query()) { echo "n"; } } $app->redirect('index.php?option=' . $option . '&task=showcat', JText::_('COM_MYQUESTIONS_CATEGORY_DELETED')); } Листинг .
Добавьте в файл admin.myquestions.html.phpв класс HTML_questions метод editCategory() для отображения формы редактирования категории:
function editCategory ($row, $option) { $editor =& JFactory::getEditor(); ?>
Наконец, добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.iniкод:
COM_MYQUESTIONS_CATEGORY_SAVED="Категория сохранена" COM_MYQUESTIONS_CATEGORY_DELETED="Категории успешно удалены"
Убедитесь, что все кнопки обеих панелей инструментов работают корректно.
Присвоение вопросу какой-либо категории
Добавим в форму ответа на вопрос выпадающий список для выбора категории.
Откройте файл admin.myquestions.phpи измените код функции replyToQuestion() следующим образом:
function replyToQuestion($option) { $row =& JTable::getInstance('Question','Table'); $cid = JRequest::getVar('cid', array(0), '', 'array'); $id = $cid[0]; $row->load($id); $db = &JFactory::getDBO(); $query = 'SELECT name AS text, id AS value FROM #__myquestions_categories'; $db->setQuery($query); $categories = $db->loadObjectList(); $list_cat = JHTML::_('select.genericlist', $categories, 'id_cat', ' class="inputbox" ', 'value', 'text', $row->id_cat); HTML_questions::replyToQuestion($row, $option, $list_cat); }
В файле admin.myquestions.html.phpизмените прототип функции HTML_questions::replyToQuestion() так:
function replyToQuestion ($row, $option, $list_cat)
Наконец, в коде этой функции измените фрагмент, в котором раньше выводилось текстовое поле с id категории, так:
Перейдите к странице ответа на вопрос и убедитесь, что отображается выпадающий список для выбора категории (рис. 3.13).
Рис. 3.13. Выбор категории вопроса в бэкенде
Ключевые термины
JHTML - класс для вывода элементов XHTML. JHTMLBehavior - поддерживающий класс, который позволяет вывести календарь, дерево элементов, файловый загрузчик и некоторые другие элементы управления. JHTMLEmail - поддерживающий класс, содержащий метод для скрытия адреса электронной почты в целях его защиты от спам-ботов. JHTMLForm - поддерживающий класс, содержащий метод, который возвращает код скрытого поля формы для уменьшения риска CSRF-атак. JHTMLGrid - поддерживающий класс, позволяющий вывести в таблице в панели управления такие элементы, как чекбокс, пиктограмма для переключения состояния "опубликовано"/"не опубликовано", отобразить заголовок столбца как ссылки для сортировки по этому столбцу и др. JHTMLImage - поддерживающий класс, содержащий методы для поиска изображения в фронтенде и бэкенде. JHTMLList - поддерживающий класс для создания списков некоторых конкретных значений. JHTMLSelect - поддерживающий класс для генерации кода списков. Основной метод класса JHTML - метод JHTML::_(), который вызывает метод, определяющийся его первым параметром, и передает ему свои остальные параметры. Поддерживающие классы - классы для вывода элементов XHTML и поведений Javascript.
Краткие итоги
Joomla содержит методы для генерации и отображения элементов XHTML и поведений JavaScript. Эти методы вызываются с помощью метода JHTML::_(). По первому параметру данный метод определяет, какой метод необходимо вызвать, а остальные параметры передаются в этот метод. Таким образом могут быть вызваны как методы самого класса JHTML, так и методы поддерживающих классов.
Методы класса JHTML позволяют вывести следующие элементы: календарь, форматированную дату, элементы