Описание

Selector - механизм формирования выборок, который должен заменить старый механизм выборок с помощью umiSelection и umiSelectionParser. Класс selector создан для того, чтобы избавиться от необходимости использования дополнительных классов и упростить определение искомых полей.

Использование

Определение результата выборки

При создании экземпляра класса selector, в конструктор необходимо передать строку "objects" или "pages". Эта строка определяет результат выборки: список объектов (umiObject) или список страниц (umiHierarchyElement) соответственно. В случае, если строка не задана или задана не верно, будет выброшено исключение selectorException.

$pages = new selector('pages');

Фильтрация по значениям свойств

Методы фильтрации

Метод Описание
equals поиск точного вхождения строки или числа. В качестве аргумента может принимать строку, число или массив.
notequals поиск, исключая указанные вхождения строки или числа. В качестве аргумента может принимать строку, число или массив.
like

поиск по подстроке

ilike

поиск по подстроке без учета регистра

more

поиск ">" ("больше")

eqmore

поиск ">=" ("больше, либо равно")

less

поиск "<" ("меньше")

eqless

поиск "<=" ("меньше, либо равно")

between

поиск по интервалу

isnull поиск по нулевому значению (NULL)
isnotnull

поиск по не нулевому значению (NOT NULL)

 

Примеры:

// ...WHERE login LIKE 'adm%'
$users->where('login'
)->like('adm%');

// ...WHERE last_request_time > (time() - 3600)
$users->where('last_request_time')->more(time() - 3600);

// ...WHERE last_request_time BETWEEN (time() - 3600) AND time()
$users->where('last_request_time')->between(time()-3600, time());

// ...WHERE is_activated IS NULL
$users->where('is_activated')->isnull(true);

Системные свойства объектов

id - идентификатор объекта.
name - название объекта. По умолчанию ищет любое название.
owner- владелец объекта (создатель). По умолчанию ищет страницы любого владельца.
guid - строковый идентификатор объекта.
* - особый способ поиска - по всем возможным свойствам. Ищется вхождение хотя бы по одному свойству объекта.

Cистемные свойства страниц

id - идентификатор страницы.
name - название страницы. По умолчанию ищет любое название.
owner - владелец страницы (создатель). По умолчанию ищет страницы любого владельца.
domain - ID домена, в котором находится страница. По умолчанию используется текущий домен. Если передать false, поиск будет произведен по всем доменам.
lang - ID языка, в котором находится страница. По умолчанию используется текущий язык. Если передать false, поиск будет произведен по всем языкам.
is_deleted - флаг удаленной страницы. По умолчанию ищет только неудаленные страницы.
is_active - флаг активности страница. По умолчанию на стороне сайта ищет только активные страницы, в административном интерфейсе - любые страницы.
is_visible - флаг видимости страницы. По умолчанию не учитывается.
updatetime - время последнего обновления страницы. По умолчанию не учитывается.
is_default - флаг главной страницы. По умолчанию не учитывается.
template_id - шаблон страницы. По умолчанию не учитывается.
alt_name - псевдостатический адрес страницы.
* - особый способ поиска - по всем возможным свойствам. Ищется вхождение хотя бы по одному свойству страницы.
ord - порядок следования страниц в рамках родительского раздела.

Важно: Необходимо учитывать, что по умолчанию в результат выборки входят только активные страницы. Чтобы произвести выборку и активных, и неактивных страниц (либо только неактивных), нужно явно указать это в параметрах выборки.

 

Сортировка

Системные свойства объектов

name - сортировать по названию объекта;
rand - сортировать в случайном порядке.  

Системные свойства страниц

ord - сортировать по порядку страницы, выставленному в структуре сайта (при помощи drag&drop'а);
name - сортировать по названию страницы;
rand - сортировать в случайном порядке.

 

Опции выборки

or-mode - включает режим дизъюнкции (логическое "ИЛИ"). Можно использовать параметры all, field, fields и value для применения дизъюнкции для всех данных, в рамках одного поля, для списка полей и конкретных значений соответственно;
root - выбрать только страницы, которые находятся в корне сайта, либо не вложены в страницы, перечисленные в types("hierarchy-types");
exclude-nested - исключить из результатов выборки все вложенные страницы, которые являются подстраницами, входящих в выборку страниц;
no-length - не считать количество найденных объектов/страниц;
no-permissions - не учитывать в запросе права на страницы;
load-all-props - загружать все свойства полученных объектов в кэш.
search-in-related-object - включает/выключает поиск по полям связанного объекта при использовании метода where() с полем типа "Выпадающий список" или "Выпадающий список со множественным выбором". По умолчанию опция включена.

Опции выборки можно установить при помощи метода option().

Примеры

Выборки объектов

Получение списка пользователей:

$users = new selector('objects');
$users->types('object-type')->name('users', 'user');
foreach($users as $user)
echo "{$user->login}\n";

echo "Total users: {$users->length}";
 

Поиск по свойству:

$users = new selector('objects');
$users->types('object-type')->name('users', 'user');
$users->where('login')->equals('admin');
foreach($users as $user)
echo "{$user->login}\n";

echo "Total users: {$users->length}";

Сортировка:

$users = new selector('objects');
$users->types('object-type')->name('users', 'user');
$users->where('login')->like('a%');
$users->order('last_request_time')->desc();
foreach($users as $user)
echo "{$user->login}\n";

echo "Total users: {$users->length}";

Случайная сортировка:

$users = new selector('objects');
$users->types('object-type')->name('users', 'user');
$users->order('rand');
foreach($users as $user)
echo "{$user->login}\n";

echo "Total users: {$users->length}";

Группировка пользователей по имени:

$users = new selector('objects');
$users->types('object-type')->name('users', 'user');
$users->group('fname');
foreach($users as $user) {
echo $user->getValue('fname') . "\n";
}
echo "Total users: {$users->length}";

Выборки страниц

Получение всех страниц:

$pages = new selector('pages');
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Все объекты каталога:

$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Объекты каталога по произвольным параметрам:

$pages = new selector('pages');
$pages->types('object-type')->id(125);
$pages->types('hierarchy-type')->name('catalog', 'object');
$pages->where('price')->eqless(500);
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Все страницы в конкретном разделе:

$pages = new selector('pages');
$pages->where('hierarchy')->page('/katalog/')->childs(3);
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Фильтрация по правам:

$pages = new selector('pages');
$pages->where('permissions')->owners(2373)->level(0x1);
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Опция exclude-nested:

$pages = new selector('pages');
$pages->types('hierarchy-type')->name('news', 'rubric');
$pages->types('hierarchy-type')->name('news', 'item');
$pages->option('exclude-nested', true);
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Опция root:

$pages = new selector('pages');
$pages->types('hierarchy-type')->name('news', 'rubric');
$pages->types('hierarchy-type')->name('news', 'item');
$pages->option('root', true);
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Поиск по всем свойствам:

$pages = new selector('pages');
$pages->types('hierarchy-type')->name('content', 'page');
$pages->where('*')->equals('cms');
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Поиск по свойствам типа optioned:

$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
$pages->where('stores_state')->equals(array('int' => 123));
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Поиск по свойствам типа symlink

$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
$pages->where('cat_id')->equals(['id' => 123]);
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Ограничение количества результатов выборки:

$pages = new selector('pages');
$pages->limit(0, 30); // offset,limit
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";
>

Изменение домена поиска:

$pages = new selector('pages');
$pages->where('domain')->equals(false);
$pages->where('lang')->equals(false);
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Поиск только неактивных страниц:

$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
$pages->where('is_active')->equals(0);
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";

Поиск всех страниц (активных + неактивных):

$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
$pages->where('is_active')->equals(array(0,1));
foreach($pages as $page)
echo "<a href=\"{$page->link}\">{$page->name}</a>\n";

echo "Pages found: {$pages->length}";