Чекбоксы вместо выпадающего списка при фильтрации объектов каталога
Материал из Umicms
Задача: реализовать в фильтрации каталога представление данных из выпадающего списка в виде чекбоксов.
Данную задачу можно решить используя кастомный макрос. В кастомный макрос передается значение %name%, и используя средства API UMI.CMS [1] скрипт получает содержимое справочника для переданного поляи по полученным значения сформировать в цикле чекбоксы.
Вызов в кастомного скрипта производится в блоке search_block_line_relation (шаблона по которому производится фильтрация):
%custom filter_checkbox(%id%, %name%)% %object_name%<br/>
В результате, код кастомного макроса должен выглядеть следующим образом:
public function filter_checkbox($items, $name) { $field_name = $name; $hierarchy = umiHierarchy::getInstance(); $controller = cmsController::getInstance(); $page_id = $controller->getCurrentElementId(); $h_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName('catalog', 'object')->getId(); $type_id = $hierarchy->getDominantTypeId($page_id, 10, $h_type_id); $type = umiObjectTypesCollection::getInstance()->getType($type_id); $field_id = $type->getFieldId($field_name); $field = umiFieldsCollection::getInstance()->getField($field_id); $guid_id = $field->getGuideId(); $arr = umiObjectsCollection::getInstance()->getGuidedItems($guid_id); $res = ""; $i = 0; foreach ($arr as $key=>$value) { $res .= "<input type=\"checkbox\" name=\"fields_filter[$name][" . $i . "]\" id=\"" . $key ."\" value=\"" . $key ."\" />" . $value . "<br/>"; $i++; } return $res; }
