Как сделать выборку по нескольким типам данных

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9.1

Выборки по USel

По Usel, , см. "Полезные ссылки", нельзя получить адекватные результаты выборки по нескольким значениям тега <type> из-за особенностей протокола, если указывать в type id:

  <type id="55"/>
  <type id="82"/>
  <type id="73"/>
  <type id="31"/>

то в результатах выборки будут присутствовать только несколько типов, а если указать в type module/method:

  <type module="news" method="rubric" />
  <type module="catalog" method="category"/>
  <type module="content" method="page" />
  <type module="photoalbum" method="album"/>

то выборка будет произведена только по первой строке. Для решения задачи нужно использовать Selector, см. "Полезные ссылки"

Выборки по Selector

Используя Selector мы можем указать сколько угодно значений типов у метода types(), как таким:

$pages->types('object-type')->id(55);
$pages->types('object-type')->id(82);
$pages->types('object-type')->id(73);
$pages->types('object-type')->id(31);

так и таким способом:

$pages->types('object-type')->name('news','rubric');
$pages->types('object-type')->name('catalog','category');
$pages->types('object-type')->name('content','');
$pages->types('object-type')->name('photoalbum','album');

В результатах выборки будут присутствовать все заданные типы данных.

Прикладной пример

Разберем пример, допустим нам нужно получить все страницы контента, разделы каталога, фотоальбомы и рубрики новостей, в типе данных у которых указано поле top-menu со значением 1.

Для реализации этой задачи был разработан макрос getQueryItems(), если Вам нужны другие параметры выборки, то его очень просто модифицировать.

Работа в xslt

Работа в tpl

Полезные ссылки