Читаем Разрботка расширений для CMS Joomla полностью

_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; $ilink=JRoute::_('index.php?option='.$option.'&id='.$row->id.'&view=category&task=show'); } $this->assignRef('list', $list); parent::display($tpl); } } ?>

Класс QuestionViewAll объявляется как производный от класса JView.

В методе display() мы получаем ссылку на ассоциированную с данным представлением модель и используем ее метод getList(), чтобы получить список категорий. К каждому элементу этого списка добавляем ссылку для просмотра данной категории. Связываем этот список с переменной list шаблона и вызываем метод JView::display() для отображения шаблона.

По умолчанию будет отображен шаблон default. Напишем его. Создайте файл /components/com_myquestions/views/all/tmpl/default.php:

". JText::_('COM_MYQUESTIONS_ADD_QUESTION').""; ?>

list as $l) echo ''; ?>

'.$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; $ilink=JRoute::_('index.php?option='.$option.'&id='.$row->id.'&view=question&task=show'); if ($is_all_cat) $row->link_cat=JRoute::_('index.php?option='.$option.'&id='.$row->id_cat.'&view=category&task=show'); } $this->assignRef('list', $list); $this->assignRef('name_cat', $name_cat); $this->assignRef('is_all_cat', $is_all_cat); parent::display($tpl); } } ?>

Данный код в целом аналогичен коду метода QuestionViewAll::display(). Если выводится список вопросов сразу из всех категорий, то в name_cat будет храниться текст "Все вопросы", а к объекту-представителю каждого вопроса добавится ссылка на его категорию. Если же выводится содержимое одной категории, то в name_cat будет храниться ее название, а ссылок на категорию каждого вопроса выводиться не будет, т.к. все эти ссылки будут одинаковы и вести на страницу с текущим же списком.

Для создания шаблона по умолчанию создайте файл /components/com_myquestions/views/category/tmpl/default.php:

".JText::_('COM_MYQUESTIONS_ADD_QUESTION').""; ?>

name_cat?>

list as $l): ?> is_all_cat == true) { ?>
name?> email?> date, JText::_('DATE_FORMAT_LC3'))?> city?>
name_cat?>
question?>
answer?>
--->

Данный шаблон аналогичен шаблону по умолчанию для представления all.


Просмотр одного вопроса

Код для отображения одного вопроса аналогичен коду для отображения списка вопросов. Создайте файл /components/com_myquestions/views/question/view.html.php:

Перейти на страницу:

Похожие книги

Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT