Чекбоксы вместо выпадающего списка при фильтрации объектов каталога — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 14: Строка 14:
  
 
<source lang="php">
 
<source lang="php">
        public function filter_checkbox($items, $name) {
+
public function filter_checkbox($items, $name) {
             
+
$field_name = $name;
            $field_name = $name;
+
$hierarchy = umiHierarchy::getInstance();
            $hierarchy = umiHierarchy::getInstance();
+
$controller = cmsController::getInstance();
            $controller = cmsController::getInstance();
+
$page_id = $controller->getCurrentElementId();
            $page_id = $controller->getCurrentElementId();
+
$h_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName('catalog', 'object')->getId();
            $h_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName('catalog', 'object')->getId();
+
$type_id = $hierarchy->getDominantTypeId($page_id, 10, $h_type_id);
            $type_id = $hierarchy->getDominantTypeId($page_id, 10, $h_type_id);
+
if(!$type_id){
                 
+
$type_id = umiObjectTypesCollection::getInstance()->getTypeByHierarchyTypeId($h_type_id);
            $type = umiObjectTypesCollection::getInstance()->getType($type_id);
+
}
            $field_id = $type->getFieldId($field_name);          
+
$type = umiObjectTypesCollection::getInstance()->getType($type_id);
            $field = umiFieldsCollection::getInstance()->getField($field_id);
+
$field_id = $type->getFieldId($field_name);
                 
+
if(!$field_id){
            $guid_id = $field->getGuideId();
+
throw new publicException('field with name <strong>\'' . $name . '\'</strong> not found in type with id = ' .  $type_id);
            $arr = umiObjectsCollection::getInstance()->getGuidedItems($guid_id);
+
}
             
+
$field = umiFieldsCollection::getInstance()->getField($field_id);
            $res = "";
+
$guid_id = $field->getGuideId();
            $i = 0;
+
$arr = umiObjectsCollection::getInstance()->getGuidedItems($guid_id);
         
+
 
            foreach ($arr as $key=>$value) {
+
$res = "";
                $res .= "<input type=\"checkbox\" name=\"fields_filter[$name][" . $i . "]\" id=\"" . $key ."\" value=\"" . $key ."\" />" . $value . "<br/>";
+
$i = 0;
                $i++;
+
 
            }
+
foreach ($arr as $key=>$value) {
   
+
  $res .= "<input type=\"checkbox\" name=\"fields_filter[$name][" . $i . "]\" id=\"" . $key ."\" value=\"" . $key ."\" />" . $value . "<br/>";
            return $res;
+
  $i++;
             
+
}
        }
+
 
 +
return $res;
 +
}
 
</source>
 
</source>

Версия 11:57, 3 марта 2014

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


Данную задачу можно решить используя кастомный макрос. В кастомный макрос передается значение %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);
			if(!$type_id){
				$type_id = umiObjectTypesCollection::getInstance()->getTypeByHierarchyTypeId($h_type_id);
			}
			$type = umiObjectTypesCollection::getInstance()->getType($type_id);
			$field_id = $type->getFieldId($field_name);
			if(!$field_id){
				throw new publicException('field with name <strong>\'' . $name . '\'</strong> not found in type with id = ' .  $type_id);
			}
			$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;
		}