display()

’tag’

Добавление модели и вида с шаблоном к компоненту в Joomla 1.7

Май 27, 2012

Для начала в папке с компонентом в открытой части сайта необходимо создать папку 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:

  • обращается к модели;
  • загружает шаблон.

Tags: , , , , , , , , , , ,
Записано в Joomla, Программирование    |    Постоянная ссылка