Разрботка расширений для CMS Joomla - Страница 15
$query = 'SELECT id,title FROM #__content'; $db =& JFactory::getDBO(); $db->setQuery($query); $content = $db->loadObjectList(); echo JHTML::_('select.radiolist', $content, 'radlist', 'class="inputbox"', 'id', 'title', 2, 'radlist', false);
Результат показан на рис. 3.10.
Рис. 3.10. Группа переключателей
Практика
Обработка категорий
В единственном вопросе, который хранится в нашей базе, в поле id_cat стоит значение 1. Оно должно означать id категории. Добавим таблицу и код для работы с категориями.
Создание таблицы для категорий
Выполните следующий SQL-запрос, чтобы создать таблицу для хранения категорий:
CREATE TABLE `jos_myquestions_categories` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `desc` TEXT NOT NULL DEFAULT '' )
Добавьте записи в эту таблицу:
INSERT INTO `jos_myquestions_categories` VALUES (NULL,'Без категории',''), (NULL,'Риторические вопросы','Вопросы, не требующие ответа')
Зайдите в phpMyAdminи убедитесь, что таблица jos_myquestions_categoriesсодержит две записи (рис. 3.11).
Рис. 3.11. Таблица базы данных, хранящая данные о категориях
Таким образом, сейчас все вопросы, для которых в поле id_catстоит значение 1, относятся к категории " Без категории".
Создание класса таблицы
Создайте файл /administrator/components/com_myquestions/tables/category.php:
Вывод списка категорий
Добавьте в файл admin.myquestions.phpфункцию showCategories():
function showCategories($option) { $db =& JFactory::getDbo(); $query = "SELECT * FROM #__myquestions_categories"; $db->setQuery($query); $rows = $db->loadObjectList(); if ($db->getErrorNum()) { echo $db->stderr(); return false; } HTML_questions::showCategories($option, $rows); }
Эта функция аналогична функции showQuestions(), рассмотренной ранее.
В файл admin.myquestions.html.phpв класс HTML_questions добавьте еще одну функцию:
function showCategories($option, &$rows) { ?>
Данная функция также аналогична одноименной функции для отображения списка вопросов.
Добавьте в переключатель switch в файле admin.myquestions.phpобработку новой задачи:
case 'showcat': showCategories($option); break;
Добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.iniкод:
COM_MYQUESTIONS_CATEGORY_NAME="Название категории" COM_MYQUESTIONS_CATEGORY_DESC="Описание категории"
Перейдя по ссылке ссылка: http://localhost/joomla/administrator/index.php?option=com_myquestions&task=showcat, вы уже можете увидеть список категорий.
Однако пока над списком будет отображаться старая панель инструментов, которую мы создали для списка вопросов. Поэтому необходимо также создать новые панели инструментов для работы с категориями. Откройте файл toolbar.myquestions.phpи добавьте в переключатель switch следующий код:
case 'showcat': TOOLBAR_myquestions_categories::_DEFAULT(); break;
Как видите, мы добавили обработку задачи showcat - отображение списка категорий. Соответственно, вызывается функция _DEFAULT() класса TOOLBAR_myquestions_categories. Напишем код этого класса. Добавьте в файл toolbar.myquestions.html.phpкод:
class TOOLBAR_myquestions_categories { function _DEFAULT() { JToolBarHelper::title(JText::_('COM_MYQUESTIONS_TOOLBAR_TITLE_CATEGORIES'), 'generic.png'); JToolBarHelper::addNew('addcat'); JToolBarHelper::editList('editcat'); JToolBarHelper::deleteList (JText::_('COM_MYQUESTIONS_TOOLBAR_REMOVE_CATEGORIES_CONFIRMATION'), 'removecat'); } }
Таким образом, панель инструментов для списка категорий будет содержать три кнопки: " Создать", " Изменить" и " Удалить".
Добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.iniкод:
COM_MYQUESTIONS_TOOLBAR_TITLE_CATEGORIES="Управление категориями вопросов" COM_MYQUESTIONS_TOOLBAR_REMOVE_CATEGORIES_CONFIRMATION="Вы действительно хотите удалить эти категории?"
Теперь по ссылке ссылка: http://localhost/joomla/administrator/index.php?option=com_myquestions&task=showcatвидим список категорий (рис. 3.12).
(есть увеличенное изображение)
Рис. 3.12. Список категорий в бэкенде
Создание, редактирование и удаление категорий
При нажатии на кнопки " Создать" или " Изменить", расположенные над списком категорий, должна отображаться другая панель инструментов. Для этого добавьте в класс TOOLBAR_myquestions_categories функцию _NEW():
class TOOLBAR_myquestions_categories { function _NEW() { JToolBarHelper::title(JText::_('COM_MYQUESTIONS_TOOLBAR_TITLE_CATEGORIES'), 'generic.png'); JToolBarHelper::save('savecat'); JToolBarHelper::apply('applycat'); JToolBarHelper::cancel('showcat'); } function _DEFAULT() { JToolBarHelper::title(JText::_('COM_MYQUESTIONS_TOOLBAR_TITLE_CATEGORIES'), 'generic.png'); JToolBarHelper::addNew('addcat'); JToolBarHelper::editList('editcat'); JToolBarHelper::deleteList(JText::_('COM_MYQUESTIONS_TOOLBAR_REMOVE_CONFIRMATION'), 'removecat'); } }
Запишем в файле toolbar.myquestions.php, что при обработке задач addcat и editcat должна отображаться панель инструментов _NEW. Измените код этого файла так: