Для начала в папке с компонентом в открытой части сайта необходимо создать папку models
.
В папке models должен быть файл с именем равным виду. Например:
http://localhost/index.php?option=com_simple&view=users
В данном случае в папке models
должен быть файл users.php
.
В то же время необходимо создать папку views
с подпапкой users
, которая должна содержать файл view.html.php
и папку tmpl
с файлом default.php
.
Файл users.php
должен содержать класс модели, имя которого начинается с названия компонента и заканчивается на название модели:
SimpleModelUsers
Судя по содержимому следующей папки:
/libraries/joomla/application/component
у нас в распоряжении имеется несколько классов модели, от которых может быть создан класс модели нашего компонента:
К сожалению, во-первых нет русской документации по данным классам, а также нормального объяснения принципа работы от самих разработчиков на английском. Есть официальная документация, но примеры использования только по самой Джумле нужно искать и самому себе объяснять их.
Класс JModelList
позволяет быстро сделать выборку нужных значений запросом из базы данных.
Импортируем класс и определяем наследование класса:
jimport('joomla.application.component.modellist');
class SimpleModelUsers extends JModelList
Теперь через родителя вызываем функцию getListQuery
, которая всего лишь создаст почву для нового запроса:
public function getListQuery()
{
$query = parent::getListQuery();
Теперь добавляем запрос и возвращаем его:
public function getListQuery()
{
$query = parent::getListQuery();
$query->select('name');
$query->from('#__users')
->where('id > 42');
return $query;
}
Значения из базы данных могут быть получены посредством вызова функции getItems
класса JModelList
. Вызов производится из вида, а именно файла view.html.php
:
<?php
defined( '_JEXEC' ) or die;
jimport( 'joomla.application.component.view');
class SimpleViewUsers extends JView
{
protected $items;
public function display($tpl = null)
{
$this->items = $this->get('Items');
parent::display($tpl);
}
}
Видно, что изначально импортируется файл с классом JView
:
jimport( 'joomla.application.component.view');
Файл находится здесь:
/libraries/joomla/application/component/view.php
Класс вида только один – JView
.
Метод display
класса JView
всего лишь загружает файл шаблона из папки tmpl
:
function display($tpl = null)
{
$result = $this->loadTemplate($tpl);
if (JError::isError($result)) {
return $result;
}
echo $result;
}
В классе компонента сначала в переменную $items
записываются данные из базы данных, полученные через запрос, созданный в модели компонента и выполненный посредством функции getItems
класса JModelList
.
Функция getItems
вызывается через $this->get('Items')
. Метод get
класса вида JView
сначала ищет метод, образованный через слияние "get" и передаваемого названия. В нашем случае "get + Items". Если метод не найден, то метод get
класса вида JView
обращается к своему родительскому классу JObject
.
Полученные данные записываются в переменную $items
класса вида компонента:
protected $items;
В завершение вызывается родительский метод display
:
parent::display($tpl);
Теперь в файле default.php
в папке с шаблонами tmpl
можно вывести данные из переменной $items
:
<?php defined( '_JEXEC' ) or die; ?>
<?php foreach ($this->items as $item) : ?>
<?php echo $this->escape($item->name); ?><br />
<?php endforeach; ?>
После запуска в стоке браузера следующего url:
http://localhost/joomla17/index.php?option=com_simple&view=users
На экране будет виден список пользователей.
Заключение
Вид view.html.php
:
- обращается к модели;
- загружает шаблон.