Создайте в папке /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->name.' | '.$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:
getModel; $question=$model->getQuestion; $question->date=JHTML::Date($question->date); $this->assignRef('question', $question); $this->assignRef('option', $option); $this->assignRef('link_cat',JRoute::_('index.php?option='.$option.'& id='.$question->id_cat.'&view=category&task=show')); } parent::display($tpl); } } ?>
Представление question будет соответствовать двум шаблонам - один для отображения вопроса, второй для вывода формы для отправки вопроса. Для первого шаблона необходимы данные о вопросе, которые мы получаем из модели. Для второго шаблона не требуется никаких данных кроме имени пользователя, которое мы определим в контроллере.
Напишем шаблон для отображения одного вопроса. Создайте файл /components/com_myquestions/views/question/tmpl/default.php: