Чтение онлайн

на главную

Жанры

Разрботка расширений для CMS Joomla
Шрифт:

Обновление нового узла:

UPDATE jos_menu SET lft=$right_key, rgt=$right_key+1, level=$level+1 WHERE title='com_myquestions_menu'

Пусть теперь $right_key и $level - соответственно правый ключ и уровень этого только что обновленного нами узла, а $parent_id - его id. Создадим два подпункта этого пункта меню (не забудьте заменить 10006 на id вашего компонента из таблицы #__extensions).

Подпункт для управления списком вопросов:

UPDATE jos_menu SET lft=lft+2, rgt=rgt+2 WHERE lft>$right_key; UPDATE jos_menu SET rgt=rgt+2 WHERE rgt>=$right_key AND lft<$right_key; INSERT INTO `jos_menu` (`menutype`, `title`, `alias`, `path`, `link`, `type`, `parent_id`, `level`, `component_id`, `access`, `img`, `params`, `lft`, `rgt`, `client_id`) VALUES ('menu', 'com_myquestions_menu_questions', 'Questions', 'My Questions/Questions', 'index.php?option=com_myquestions', 'component', $parent_id, $level+1, 10006, 1, 'class:component', '', $right_key, $right_key+1, 1);

Обратите

внимание, что значения alias и path соответствуют иерархии узлов.

Посмотрите в таблице #__menu новое значение $right_key главного пункта меню для нашего компонента - оно должно было увеличиться на 2. Теперь создадим подпункт для управления списком категорий:

UPDATE jos_menu SET lft=lft+2, rgt=rgt+2 WHERE lft>$right_key; UPDATE jos_menu SET rgt=rgt+2 WHERE rgt>=$right_key AND lft<$right_key; INSERT INTO `jos_menu` (`menutype`, `title`, `alias`, `path`, `link`, `type`, `parent_id`, `level`, `component_id`, `access`, `img`, `params`, `lft`, `rgt`, `client_id`) VALUES ('menu', 'com_myquestions_menu_categories', 'Categories', 'My Questions/Categories', 'index.php?option=com_myquestions&task=showcat', 'component', $parent_id, $level+1, 10006, 1, 'class:component', '', $right_key, $right_key+1, 1);

Наконец, добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.sys.iniкод:

COM_MYQUESTIONS_MENU_QUESTIONS="Управление вопросами" COM_MYQUESTIONS_MENU_CATEGORIES="Управление категориями"

Обновите любую страницу в бэкенде и убедитесь, что появились два новых подпункта меню " Моя система "вопрос - ответ"" (рис. 4.8).

(есть увеличенное изображение)

Рис. 4.8. Подпункты меню в бэкенде

Разработка фронтенда

Для удобства дальнейшего тестирования добавим еще несколько вопросов в различные категории:

INSERT INTO `jos_myquestions` (`id`, `name`, `date`, `question`, `city`, `email`, `IP`, `id_cat`) VALUES (NULL, 'Аноним', '2012-01-02 09:01:00', 'Быть или не быть?', 'Москва', 'somebody@mail.ru', '12.345.67.890', '1'); INSERT INTO `jos_myquestions` (`id`, `name`, `date`, `question`, `city`, `email`, `IP`, `id_cat`) VALUES (NULL, 'Аноним', '2012-01-01 09:02:00', 'А судьи кто?', 'Москва', 'somebody@mail.ru', '12.345.67.890', '2'); INSERT INTO `jos_myquestions` (`id`, `name`, `date`, `question`, `city`, `email`, `IP`, `id_cat`) VALUES (NULL, 'Аноним', '2012-01-01 09:03:00', ' А был ли мальчик?', 'Москва', 'somebody@mail.ru', '12.345.67.890', '2');

Для наглядности выключите SEF в настройках сайта: в бэкенде зайдите в меню " Сайт" - " Общие настройки" и установите переключатель " Включить SEF (ЧПУ)" в значение " Нет".

Вывод списка категорий

Замените содержимое файла /components/com_myquestions/myquestions.php(обратите внимание, что мы больше не работаем с папкой /administrator) на следующий код:

<?php defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.helper'); require_once(JApplicationHelper::getPath('html')); JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'. DS.$option.DS.'tables'); switch($task) { default: showCategories($option); break; } function showCategories($option) { $db =& JFactory::getDbo; $query = "SELECT c.id, c.name, c.desc ". "FROM #__myquestions_categories c"; $db->setQuery($query); $rows = $db->loadObjectlist; if ($db->getErrorNum) { echo $db->stderr; return false; } HTML_questions::showCategories($rows, $option); } ?>

Мы

подключаем файл myquestions.html.phpс помощью require_once(JApplicationHelper::getPath('html')) и папку tableбэкенда с помощью JTable::addIncludePath. Обратите внимание, что мы обращаемся к классам таблиц бэкенда, хотя пишем фронтенд компонента.

Переключатель switch обрабатывает пока только значение задачи по умолчанию, вызывая функцию для получения списка категорий.

Теперь добавим класс HTML_questions для фронтенда. Создайте файл /components/com_myquestions/myquestions.html.php:

<?php class HTML_questions { function showCategories($rows, $option) { ?> <a href='index.php?option=<?=$option?>&task=showlist'><?= JText::_('COM_MYQUESTIONS_ALL_QUESTIONS')?></a> <table> <?php foreach($rows as $row) { $link = 'index.php?option='.$option.'&id_cat='.$row->id.'&task=showlist'; echo '<tr><td><a href="#">'.$row->name .'</a></td><td>'.$row->desc.'</td></tr>'; } ?> </table> <?php } } ?>

Класс HTML_questions будет содержать все функции вывода во фронтенде. Функция showCategories принимает в качестве параметров массив записей таблицы базы данных и название текущего компонента. В цикле осуществляется обход этого массива и каждая запись выводится на экран.

Создайте файл /language/ru-RU/ru-RU.com_myquestions.iniи скопируйте в него строку:

COM_MYQUESTIONS_ALL_QUESTIONS="Все вопросы"

Теперь на странице компонента myquestions во фронтенде по умолчанию отображается список категорий (рис. 4.9).

(есть увеличенное изображение)

Рис. 4.9. Вывод списка категорий во фронтенде

Просмотр списка вопросов

Измените код конструкции switch в файле myquestions.php, добавив обработку задачи showlist:

case 'showlist': showQuestions($option); break;

Добавьте в этот же файл функцию showQuestions:

function showQuestions($option) { $db =& JFactory::getDbo; $query = "SELECT q.id,q.name,q.date,q.question,q.city,q.email,q.answer,q.id_cat,c.name AS cname ". "FROM #__myquestions q, #__myquestions_categories c ". "WHERE q.id_cat=c.id AND q.answer <> '' AND (q.published = 1 OR (q.expiration_date <> '0000-00-00 00:00:00' AND q.expiration_date > NOW))"; $id_cat = JRequest::getVar('id_cat', '0'); if ($id_cat != 0) $query .= " AND q.id_cat = $id_cat"; $db->setQuery($query); $rows = $db->loadObjectlist; if ($db->getErrorNum) { echo $db->stderr; return false; } if ($id_cat != 0) { $query = "SELECT name FROM #__myquestions_categories WHERE id=$id_cat"; $db->setQuery($query); if ($db->getErrorNum) { echo $db->stderr; return false; } $name_cat = $db->loadResult; } else $name_cat = ''; HTML_questions::showQuestions($rows, $option, $name_cat); }

Поделиться:
Популярные книги

Звезда сомнительного счастья

Шах Ольга
Фантастика:
фэнтези
6.00
рейтинг книги
Звезда сомнительного счастья

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Возвышение Меркурия. Книга 7

Кронос Александр
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 7

На границе империй. Том 2

INDIGO
2. Фортуна дама переменчивая
Фантастика:
космическая фантастика
7.35
рейтинг книги
На границе империй. Том 2

Легат

Прокофьев Роман Юрьевич
6. Стеллар
Фантастика:
боевая фантастика
рпг
6.73
рейтинг книги
Легат

Младший сын князя

Ткачев Андрей Сергеевич
1. Аналитик
Фантастика:
фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Младший сын князя

Восьмое правило дворянина

Герда Александр
8. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восьмое правило дворянина

Энфис 4

Кронос Александр
4. Эрра
Фантастика:
городское фэнтези
рпг
аниме
5.00
рейтинг книги
Энфис 4

Серые сутки

Сай Ярослав
4. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Серые сутки

Комбинация

Ланцов Михаил Алексеевич
2. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Комбинация

Чехов книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Чехов книга 3

Двойня для босса. Стерильные чувства

Лесневская Вероника
Любовные романы:
современные любовные романы
6.90
рейтинг книги
Двойня для босса. Стерильные чувства

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Инцел на службе демоницы 1 и 2: Секса будет много

Блум М.
Инцел на службе демоницы
Фантастика:
фэнтези
5.25
рейтинг книги
Инцел на службе демоницы 1 и 2: Секса будет много