Описание
Selector - механизм формирования выборок, который должен заменить старый механизм выборок с помощью umiSelection и umiSelectionParser. Класс selector создан для того, чтобы избавиться от необходимости использования дополнительных классов и упростить определение искомых полей.
Использование
Определение результата выборки
При создании экземпляра класса selector, в конструктор необходимо передать строку "objects" или "pages". Эта строка определяет результат выборки: список объектов (umiObject) или список страниц (umiHierarchyElement) соответственно. В случае, если строка не задана или задана не верно, будет выброшено исключение selectorException.
$pages = new selector('pages');
Фильтрация по значениям свойств
Методы фильтрации
Метод | Описание |
|
поиск точного вхождения строки или числа. В качестве аргумента может принимать строку, число или массив. |
|
поиск, исключая указанные вхождения строки или числа. В качестве аргумента может принимать строку, число или массив. |
like |
поиск по подстроке |
ilike |
поиск по подстроке без учета регистра |
more |
поиск ">" ("больше") |
eqmore |
поиск ">=" ("больше, либо равно") |
less |
поиск "<" ("меньше") |
eqless |
поиск "<=" ("меньше, либо равно") |
between |
поиск по интервалу |
isnull |
поиск по нулевому значению (NULL) |
|
поиск по не нулевому значению (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}";