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

на главную

Жанры

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

Длинный SQL-запрос требует пояснения. Как вы помните, при описании функциональности нашего компонента упоминалось, что отображаться на сайте будут вопросы, удовлетворяющие следующим условиям:

есть ответ;

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

Данный запрос выбирает вопросы, которые соответствуют этим условиям.

Проверяется значение переменной $id_cat (id категории), и если категория задана, то из базы выбираются только вопросы, отнесенные к этой категории. Затем извлекается название категории для отображения над списком вопросов. Если же категория не задана, то выбираются вопросы из всех категорий.

Добавьте в класс HTML_questions

в файле myquestions.html.phpследующую функцию:

function showQuestions($rows, $option, $name_cat) { if ($name_cat !== '') echo "<h1>$name_cat</h1>"; foreach($rows as $row) { $link = 'index.php?option='.$option.'&id='.$row->id.'&task=showquestion'; $link_cat = 'index.php?option='.$option.'&id_cat='.$row->id_cat.'&task=showlist'; ?> <table width="100%"> <tr> <td><i><?=$row->name?></i></td> <td><i><u><?=$row->email?></u></i></td> <td><i><?=JHTML::_('date', $row->date, JText::_('DATE_FORMAT_LC3'))?></i></td> <td><i><?=$row->city?></i></td> </tr> <tr> <td colspan="4"><a href="#"><?=$row->cname?></a></td> </tr> <tr> <td colspan="4"><b><?=$row->question?></b></td> </tr> <tr> <td colspan="4"><?=$row->answer?></td> </tr> <tr> <td colspan="4"><a style="text-decoration: none;" title="<?=JText::_('COM_MYQUESTIONS_READMORE')?>" alt="<?=JText::_ ('COM_MYQUESTIONS_READMORE')?>" href="#">---></a></td> </tr> </table> <br/> <? } }

Данная функция выводит название категории, если оно задано, и затем проходит в цикле по всем записям, переданным ей. Для каждой записи выводится таблица с теми ее полями, которые были извлечены ранее.

Добавьте в файл language/ru-RU/ru-RU.com_myquestions.iniстроку:

COM_MYQUESTIONS_READMORE="Подробнее"

Для проверки работоспособности нового кода нажмите на ссылку " Все вопросы" во фронтенде нашего компонента. Результат должен быть приблизительно таким, как на рис. 4.10.

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

Рис. 4.10. Список вопросов во фронтенде

Вывод одного вопроса

Иногда может понадобиться вывести какой-либо один вопрос. Например, если пользователь захочет поделиться ссылкой на свой вопрос с кем-то другим.

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

case 'showquestion': showQuestion($option); break;

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

function showQuestion($option) { $id = JRequest::getVar('id', 0) ; $row = &JTable::getInstance ('question', 'Table'); $row->load($id); if ($row->answer == '' || ($row->published == 0 && ($row->expiration_date == '0000-00-00 00:00:00' || strtotime($row->expiration_date) <= time))) JError::raiseError(404, JText::_(' COM_MYQUESTIONS_ERROR404')); $row_cat =& JTable::getInstance('Category','Table'); $row_cat->load($row->id_cat); HTML_questions::showQuestion($row, $option, $row_cat); }

В данном коде мы получаем id из запроса к серверу с помощью функции getVar. Если значение id отсутствует или неприемлемо, будет использовано значение по умолчанию, переданное во втором параметре (ноль). Затем мы получаем экземпляр класса таблицы из бэкенда и загружаем запись таблицы базы данных, соответствующую идентификатору id.

Далее

происходит проверка того, можно ли отображать в открытом доступе данный вопрос. Исходя из условий отображения вопроса на сайте, нетрудно заметить, что не должны отображаться на сайте вопросы, удовлетворяющие хотя бы одному из условий:

нет ответа;

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

Если вопрос не должен отображаться, то используется функция raiseError класса JError для вывода сообщения " 404 - Вопрос не найден". Такое же сообщение появится при попытке обращения к несуществующей записи.

Добавьте в файл language/ru-RU/ru-RU.com_myquestions.iniстроку:

COM_MYQUESTIONS_ERROR404="Вопрос не найден"

Проверьте, что при обращении к вопросу, который не должен отображаться, выводится сообщение (рис. 4.11).

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

Рис. 4.11. Ошибка 404 "Вопрос не найден"

Теперь создадим функцию в классе вывода. Добавьте функцию showQuestion в класс HTML_questions в файле myquestions.html.php:

function showQuestion($row, $option, $row_cat) { $link_cat = 'index.php?option='.$option.'&id_cat='.$row->id_cat.'&task=showlist'; ?> <a href='index.php?option=<?=$option?>&task=showlist'><?=JText::_ ('COM_MYQUESTIONS_ALL_QUESTIONS')?></a> <table width="100%"> <tr> <td><i><?=$row->name?></i></td> <td><i><u><?=$row->email?></u></i></td> <td><i><?=JHTML::_('date', $row->date,JText::_ ('DATE_FORMAT_LC3'))?></i></td> <td><i><?=$row->city?></i></td> </tr> <tr> <td colspan="4"><a href="#"><?=$row_cat->name?></a></td> </tr> <tr> <td colspan="4"><b><?=$row->question?></b></td> </tr> <tr> <td colspan="4"><?=$row->answer?></td> </tr> </table> <? }

Данная функция аналогична функции showQuestions за исключением того, что выводит не массив вопросов, а один вопрос.

Теперь в списке вопросов стрелка под каждым из них ("--->") ведет на страницу с выводом этого вопроса (рис. 4.12).

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

Рис. 4.12. Просмотр вопроса

Ключевые термины

JDate - класс для работы с датами. JEditor - класс для работы с WYSIWYG-редактором. JError - класс для работы с ошибками. JMail - класс для создания и отправки электронных писем. JMailHelper - класс для очистки данных перед добавлением к электронному письму и проверки, является ли заданная строка корректным адресом электронной почты. JURI - класс для работы с URI. Иерархия пунктов меню - дерево, состоящее из пунктов меню и организованное с помощью вложенных множеств.

Краткие итоги

Для хранения иерархии пунктов меню в Joomla используются вложенные множества. Для каждого пункта в базе данных хранится id родителя, уровень и левый и правый ключи.

Создавать и отправлять электронные письма удобнее с помощью методов класса JMail.

Для работы с WYSIWYG-редактором используется класс JEditor.

Класс JURI позволяет работать с URI текущей или любой другой страницы.

Для работы с ошибками и предупреждениями может быть использован класс JError.

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

Сумеречный Стрелок 3

Карелин Сергей Витальевич
3. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 3

Имперец. Том 1 и Том 2

Романов Михаил Яковлевич
1. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 1 и Том 2

Мимик нового Мира 4

Северный Лис
3. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 4

Хочу тебя любить

Тодорова Елена
Любовные романы:
современные любовные романы
5.67
рейтинг книги
Хочу тебя любить

(Не) Все могут короли

Распопов Дмитрий Викторович
3. Венецианский купец
Фантастика:
попаданцы
альтернативная история
6.79
рейтинг книги
(Не) Все могут короли

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

Виконт. Книга 1. Второе рождение

Юллем Евгений
1. Псевдоним `Испанец`
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.67
рейтинг книги
Виконт. Книга 1. Второе рождение

Провинциал. Книга 2

Лопарев Игорь Викторович
2. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 2

Газлайтер. Том 4

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

Кодекс Охотника. Книга ХХ

Винокуров Юрий
20. Кодекс Охотника
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга ХХ

Ну, здравствуй, перестройка!

Иванов Дмитрий
4. Девяностые
Фантастика:
попаданцы
альтернативная история
6.83
рейтинг книги
Ну, здравствуй, перестройка!

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье

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

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

Идеальный мир для Социопата 7

Сапфир Олег
7. Социопат
Фантастика:
боевая фантастика
6.22
рейтинг книги
Идеальный мир для Социопата 7