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

на главную - закладки

Жанры

Разрботка расширений для 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', 'Быть или не быть?', 'Москва', '[email protected]', '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', 'А судьи кто?', 'Москва', '[email protected]', '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', ' А был ли мальчик?', 'Москва', '[email protected]', '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); }

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

Сердце Дракона. Том 20. Часть 1

Клеванский Кирилл Сергеевич
20. Сердце дракона
Фантастика:
фэнтези
боевая фантастика
городское фэнтези
5.00
рейтинг книги
Сердце Дракона. Том 20. Часть 1

Холодный ветер перемен

Иванов Дмитрий
7. Девяностые
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Холодный ветер перемен

Последнее желание

Сапковский Анджей
1. Ведьмак
Фантастика:
фэнтези
9.43
рейтинг книги
Последнее желание

Отмороженный 7.0

Гарцевич Евгений Александрович
7. Отмороженный
Фантастика:
рпг
аниме
5.00
рейтинг книги
Отмороженный 7.0

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

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

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

Наследие Маозари 5

Панежин Евгений
5. Наследие Маозари
Фантастика:
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Наследие Маозари 5

Локки 4 Потомок бога

Решетов Евгений Валерьевич
4. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 4 Потомок бога

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф

Миф об идеальном мужчине

Устинова Татьяна Витальевна
Детективы:
прочие детективы
9.23
рейтинг книги
Миф об идеальном мужчине

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Здравствуй, 1984-й

Иванов Дмитрий
1. Девяностые
Фантастика:
альтернативная история
6.42
рейтинг книги
Здравствуй, 1984-й

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Барон не играет по правилам

Ренгач Евгений
1. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон не играет по правилам