Выборка по значениям поля типа "Выпадающий список с множественным выбором"

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 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.