_id = $id; } function getQuestion() { if (!$this->_question) { $query = "SELECT q.id, q.question, q.name, q.date, q.email, q.city, q.answer, q.published, q.expiration_date, c.id AS id_cat, c.name AS name_cat FROM #__myquestions q, #__myquestions_categories c WHERE q.id_cat=c.id AND q.id = {$this->_id}"; $this->_db->setQuery($query); $this->_question = $this->_db->loadObject(); if ($this->_question->answer == '' || ($this->_question->published == 0 && ($this-> _question->expiration_date == '0000-00-00 00:00:00' || strtotime($this->_question->expiration_date) <= time()))) { JError::raiseError(404, JText::_(' COM_MYQUESTIONS_ERROR404')); } } return $this->_question; } } ?>
Функция getQuestion() загружает одну запись с заданным id. Если после загрузки вопроса оказывается, что он является неопубликованным, то генерируется сообщение об ошибке 404.
Представления
Создайте в папке /components/com_myquestionsподпапку views, а в ней - папки all, categoryи question. В каждой из них создайте по папке для шаблонов под названием tmpl.
Получившееся дерево папок показано на рис. 6.2.
Рис. 6.2. Дерево папок MVC-компонента
Просмотр списка всех категорий
Создайте файл /components/com_myquestions/views/all/view.html.php:
getModel(); $list=$model->getList(); for ($i=0; $i
Класс QuestionViewAll объявляется как производный от класса JView.
В методе display() мы получаем ссылку на ассоциированную с данным представлением модель и используем ее метод getList(), чтобы получить список категорий. К каждому элементу этого списка добавляем ссылку для просмотра данной категории. Связываем этот список с переменной list шаблона и вызываем метод JView::display() для отображения шаблона.
По умолчанию будет отображен шаблон default. Напишем его. Создайте файл /components/com_myquestions/views/all/tmpl/default.php:
". JText::_('COM_MYQUESTIONS_ADD_QUESTION').""; ?>
'.$l->desc.' |
Доступ к переменной list осуществляется через $this, т.к. это поле текущего класса QuestionViewAll.
Просмотр списка вопросов из какой-либо категории или из всех категорий
Создайте файл /com_myquestions/views/category/view.html.php:
getModel(); $list=$model->getList(); $name_cat=$model->getCatName(); $is_all_cat=$model->isAllCat(); for ($i=0; $i
Данный код в целом аналогичен коду метода QuestionViewAll::display(). Если выводится список вопросов сразу из всех категорий, то в name_cat будет храниться текст "Все вопросы", а к объекту-представителю каждого вопроса добавится ссылка на его категорию. Если же выводится содержимое одной категории, то в name_cat будет храниться ее название, а ссылок на категорию каждого вопроса выводиться не будет, т.к. все эти ссылки будут одинаковы и вести на страницу с текущим же списком.
Для создания шаблона по умолчанию создайте файл /components/com_myquestions/views/category/tmpl/default.php:
".JText::_('COM_MYQUESTIONS_ADD_QUESTION').""; ?>
=$l->name?> | =$l->email?> | =JHTML::_('date', $l->date, JText::_('DATE_FORMAT_LC3'))?> | =$l->city?> |
=$l->name_cat?> | |||
=$l->question?> | |||
=$l->answer?> | |||
---> |
Данный шаблон аналогичен шаблону по умолчанию для представления all.
Просмотр одного вопроса
Код для отображения одного вопроса аналогичен коду для отображения списка вопросов. Создайте файл /components/com_myquestions/views/question/view.html.php: