Как сделать выборку по нескольким типам данных — различия между версиями
Mad grant (обсуждение | вклад) |
Mad grant (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
[[category:Написание кастомных макросов]] | [[category:Написание кастомных макросов]] | ||
'''Актуально для версии 2.9.1''' | '''Актуально для версии 2.9.1''' | ||
− | == Выборки по | + | == Выборки по USel == |
+ | По Usel, , см. "Полезные ссылки", нельзя получить адекватные результаты выборки по нескольким значениям тега <type> из-за особенностей протокола, | ||
+ | если указывать в type id: | ||
+ | <source lang="xml"> | ||
+ | <type id="55"/> | ||
+ | <type id="82"/> | ||
+ | <type id="73"/> | ||
+ | <type id="31"/> | ||
+ | </source> | ||
+ | то в результатах выборки будут присутствовать только несколько типов, а если указать в type module/method: | ||
+ | <source lang="xml"> | ||
+ | <type module="news" method="rubric" /> | ||
+ | <type module="catalog" method="category"/> | ||
+ | <type module="content" method="page" /> | ||
+ | <type module="photoalbum" method="album"/> | ||
+ | </source> | ||
+ | то выборка будет произведена только по первой строке. Для решения задачи нужно использовать Selector, см. "Полезные ссылки" | ||
== Выборки по Selector == | == Выборки по Selector == | ||
+ | Используя Selector мы можем указать сколько угодно значений типов у метода types(), как таким: | ||
+ | <source lang="php"> | ||
+ | $pages->types('object-type')->id(55); | ||
+ | $pages->types('object-type')->id(82); | ||
+ | $pages->types('object-type')->id(73); | ||
+ | $pages->types('object-type')->id(31); | ||
+ | </source> | ||
+ | так и таким способом: | ||
+ | <source lang="php"> | ||
+ | $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'); | ||
+ | </source> | ||
+ | В результатах выборки будут присутствовать все заданные типы данных. | ||
== Прикладной пример == | == Прикладной пример == | ||
− | === | + | Разберем пример, допустим нам нужно получить все страницы контента, разделы каталога, фотоальбомы и рубрики новостей, в типе данных у которых |
− | === | + | указано поле top-menu со значением 1. |
+ | |||
+ | Для реализации этой задачи был разработан макрос getQueryItems(), если Вам нужны другие параметры выборки, то его очень просто модифицировать. | ||
+ | === Работа в xslt === | ||
+ | === Работа в tpl === | ||
== Полезные ссылки == | == Полезные ссылки == |
Версия 10:27, 11 сентября 2013
Актуально для версии 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(), если Вам нужны другие параметры выборки, то его очень просто модифицировать.