Как сделать выборку по нескольким типам данных
Актуально для версии 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(), если Вам нужны другие параметры выборки, то его очень просто модифицировать.