Выборка по значениям поля типа "Выпадающий список с множественным выбором"
Актуально для версии 2.9.1
Иногда необходимо сделать выборку по значениям поля типа "Выпадающий список с множественным выбором". Например, у объектов есть поле типа "Выпадающий список с множественным выбором". Нам нужно получить все объекты, у которых выбрано данное значение.
Пример: Объект 1 имеет выбранные значение А, В, С. Объект 2 имеет выбранные значение А, E, D Объект 3 имеет выбранные значение A, E, G
Нужно получить все 3 объекта, если мы проверяем выбрано ли значение А, получить 2 и 3 при поиске по значению E.
Для решения данной задачи нам необходимо сделать кастомный макрос, который мы разместим в /classes/modules/custom.php
public function findPole ($require_pol) {
$pages = new selector('objects');
pages->types('object-type')->id(128);
$i = 0;
foreach($pages as $page){
$pol = $page->getValue('pol');
if (!empty($pol)) {
foreach ($pol as $element) {
$name = umiObjectsCollection::getInstance()->getObject($element)->getName();
if ($name == $require_pol) {
$require_id[$i] = $page->id;
$require_name[$i] = $page->name;
$i++;
}
}
}
}
for ($a = 0; $a < $i; $a++) {
$item_arr['attribute:id']=$require_id[$a];
$item_arr['node:value']=$require_name[$a];
$items[] = $item_arr;
}
$block_arr['items']['nodes:item'] = $items;
return $block_arr;
}
В данном примере у нас есть 3 объекта, у них есть поле "Пол", у всех трех есть общее выбранное значение "Мужской". Для начала, мы передаем в этот макрос искомое значение, т.е. Мужской. Далее мы выборкой находим объекты нужного типа данных, и получаем массивы заполненных значений поля "Выпадающий список с множественным выбором". После этого мы сравниваем их с искомым, и в случае совпадения мы выводим имя этого объекта и его id.