Нодус:Простейшие селекторы

Компонент: Nodus

Мы создали в Нодусе свой тип данных и наполнили БД неким набором записей этого типа. Теперь перед нами стоит задача создать страницу со списком этих записей:

  • Отобразить список записей типа cat с постраничной навигацией
  • В списке записей отображается сокращенная версия записи со ссылкой на полную версию

Нам на помощь придут селекторы. Селектор - это объект, который выбирает записи по какому-либо критерию. Простейший селектор создается системой автоматически и служит для выборки всех опубликованных записей конкретного типа. Мнемокод такого селектора совпадает с мнемокодом типа. Выполнив все описанное в предыдущей статье, мы сразу же можем воспользоваться селектором в коде проекта:

// Получим селектор
$selector = Component_Nodus::selector('cat');

// Выберем все записи
$rows = $selector->rows();

// Выберем записи по лимиту
$rows = $selector->rows($limit);
$rows = $selector->rows($limit,$offset);

// Воспользуемся хелпером для отображения списка (в шаблоне)
print $this->nodus->selector_rows($selector);

Однако, для решения нашей задачи такой селектор нам не подходит, т.к. в нем не хватает одного важного свойства: откликаться по какому-то адресу и при этом отрисовывать страницу (с заголовком, постраничной навигацией и пр.). Поэтому мы немного дополним селектор по умолчанию.

Открываем созданный нами ранее файл модуля Component.Nodus.App.Datatype.Cat.Type и дописываем в него класс Component_Nodus_App_Datatype_Cat_Selector:

class Component_Nodus_App_Datatype_Cat_Selector extends Component_Nodus_Selector
{

	public function url()
	{
		return '/cats/';
	}

	public function title()
	{
		return 'Кошки';
	}

	public function perpage()
	{
		return 10;
	}

}

Полагаю, что вряд ли есть нужда здесь что-то пояснять, ибо названия у функций - недвусмысленно говорящие. Заходим по адресу /cats/, который мы указали в селекторе, и видим искомый список с постраничной навигацией.

Изменяем внешний вид

Как и в случае с показом полной версии сайта, по умолчанию мы наблюдаем совсем не радующую взор картину. Дело в том, что система пытается отобразить записи в списке в режиме отображения teaser, а шаблона для него мы не сделали. Поэтому первым делом создадим шаблон teaser.phtml - по аналогии с full.phtml (примера приводить не буду).

Однако, хотелось бы иметь средства для изменения шаблонов не только отдельных записей, но и других элементов селектора. Для этого заглянем в каталог app/components/Nodus/views/. Там мы увидим набор файлов с префиксом "selector-". Это и есть шаблоны для отображения селектора. Сами эти файлы трогать не надо - они стандартные и желают оставаться таковыми и впредь.

  • selector-page.phtml: отображение страницы селектора - полностью с заголовком, навигаторами и пр. Внутри мы можем увидеть, что он состоит из пяти блоков, отображаемых с помощью хелпера (его, кстати, можно использовать в любых шаблонах) - верхушки страницы, верхнего навигатора, списка записей, нижнего навигатора, низушки страницы.
  • selector-rows.phtml: отображение списка записей
  • selector-page-top.phtml и selector-page-bottom.phtml: верхняя и нижняя часть страницы соответственно
  • selector-navigator-top.phtml и selector-navigator-bottom.phtml: верхний и нижний навигаторы соответственно. По умолчанию они одинаковы и состоят из одного навигатора страниц, хотя при нужде они могут отличаться и содержать в себе и другие элементы управления.
  • selector-page-navigator.phtml: навигатор страниц.

Путем переопределения шаблона мы можем изменить внешний вид как всего селектора, так и отдельного его элемента. Для переопределения надо всего лишь скопировать нужный шаблон в каталог app/components/Nodus/app/views/ и при необходимости переименовать его. Например:

  • app/views/selector-rows.phtml: переопределен внешний вид списка записей всех селекторов.
  • app/views/selector-rows-cat.phtml: то же самое, но только для селектора с мнемокодом cat (наиболее употребимый случай).
  • app/views/selector-rows-cat-1.phtml: то же самое, но только для первой страницы (мало ли - вдруг на других страницах внешний вид другой нужен).

Не забудьте после создания нового шаблона сбросить кеш, т.к. сканировать файловую систему при каждом запросе - слишком затратная процедура, поэтому список шаблонов кешируется.

Метки: Нодус
26.06.2014
Все статьи