Чекбоксы вместо выпадающего списка при фильтрации объектов каталога

Материал из Umicms
Версия от 13:17, 28 июня 2011; Alexh (обсуждение | вклад) (Новая страница: «Задача: реализовать в фильтрации каталога представление данных из выпадающего списка в в…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Задача: реализовать в фильтрации каталога представление данных из выпадающего списка в виде чекбоксов.


Данную задачу можно решить используя кастомный макрос. В кастомный макрос передается значение %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();
            $type_id = $hierarchy->getDominantTypeId($page_id, 1);
                   
            $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;
               
        }