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

$name - имя представления. По умолчанию совпадает с именем контроллера; $type - тип представления, который можно определить как $document->getType(); $prefix - префикс класса представления. По умолчанию <имя контроллера>View; $config - массив параметров, которые будут переданы в конструктор представления, - имя представления, кодировка, путь к директории шаблонов и т.д.


Если класс <префикс><имя представления> не найдется в директориях, заданных по умолчанию, то будет произведен его поиск в файле <имя представления>/view.<тип представления>.php. Например, если в коде класса MyComponentController есть строка

$view = &$this->getView('Item', 'html');

то будет произведен поиск класса MyComponentViewItem в файле /components/com_<имя компонента>/views/Item/view.html.php.


Получение объекта-представителя модели

JModel getModel(string $name = '', string $prefix = '', array $config = array())

где

$name - имя модели. По умолчанию совпадает с именем контроллера; $prefix - префикс класса модели. По умолчанию <имя контроллера>Model; $config - массив параметров, которые будут переданы в конструктор модели.


Задание параметров для будущего перенаправления

JController setRedirect(string $url, string $msg=null, string $type=null)

где

$url - URL для перенаправления; $msg - сообщение для пользователя; $type - тип сообщения. По умолчанию - "message".


Например, в коде контроллера можно написать:

$this->setRedirect('index.php?option=com_mycomponent', 'Текст сообщения', 'notice');


Перенаправление браузера

bool redirect()

Метод возвращает false, если URL для перенаправления не был задан заранее.

Практика

Модели


Модель для списка всех категорий

В папке /components/com_myquestionsсоздайте папку models, а в ней - файл all.php:

_categories) { $query = "SELECT id, name, `desc` FROM #__myquestions_categories"; $this->_categories = $this->_getList($query, 0, 0); } return $this->_categories; } } ?>

Мы подключаем библиотеку моделей Joomla и объявляем класс ModelMyQuestionsAll как производный от класса JModel. В классе хранится список категорий _categories. Метод getList() проверяет, загружен ли список категорий. Если нет, то мы создаем запрос, чтобы выбрать из базы данных все категории вопросов, и получаем их с помощью метода _getList() класса JModel.


Модель для списка вопросов из какой-либо категории или из всех категорий

Создайте файл /components/com_myquestions/models/category.php

:

_id = $id; } function getList() { if (!$this->_questions) { if ($this->isAllCat()) $id_text = ""; else $id_text = " id_cat={$this->_id} AND "; $query = "SELECT q.id, q.question, q.name, q.date, q.email, q.city, q.answer, c.id AS id_cat, c.name AS name_cat FROM #__myquestions q, #__myquestions_categories c WHERE $id_text answer <> '' AND (published = 1 OR (expiration_date <> '0000-00-00 00:00:00' AND expiration_date > NOW())) AND q.id_cat=c.id"; $this->_questions = $this->_getList($query, 0, 0); } return $this->_questions; } function getCatName() { if (!$this->_name) { if (!$this->isAllCat()) { $query = "SELECT name FROM #__myquestions_categories WHERE id = '" . $this->_id . "'"; $this->_db->setQuery($query); $this->_name = $this->_db->loadResult(); } } if (!$this->isAllCat()) return $this->_name; else return JText::_('COM_MYQUESTIONS_ALL_QUESTIONS'); } Function isAllCat() { if ($this->_id=='all') return true; return false; } } ?> Листинг .


В данном классе хранятся список вопросов _questions, id категории _id и название категории _name.

Конструктор класса вызывает конструктор родительского класса, затем получает из HTTP-запроса id категории и сохраняет его в поле _id. Если id категории не задан, то вместо него сохраняется значение all, т.к. в таком случае будут выводиться вопросы сразу из всех категорий.

Метод getCatName() возвращает либо название текущей категории, либо строку "Все вопросы", если категория не задана.

Метод isAllCat() возвращает true, если категория не задана, и false в противном случае.


Модель для одного вопроса

Создайте файл /components/com_myquestions/models/question.php:

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

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

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

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

Роберт Лав

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