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

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
 
[[category:Написание кастомных макросов]]
 
[[category:Написание кастомных макросов]]
 
'''Актуально для версии 2.9.1'''
 
'''Актуально для версии 2.9.1'''
== Выборки по usel ==
+
== Выборки по 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>
 +
В результатах выборки будут присутствовать все заданные типы данных.
 
== Прикладной пример ==
 
== Прикладной пример ==
=== Вызов в xslt ===
+
Разберем пример, допустим нам нужно получить все страницы контента, разделы каталога, фотоальбомы и рубрики новостей, в типе данных у которых
=== Вызов в tpl ===
+
указано поле 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(), если Вам нужны другие параметры выборки, то его очень просто модифицировать.

Работа в xslt

Работа в tpl

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