Группировка на umi cms

    Группировки по-умолчанию в юми нет. Как же тогда получить подобное меню?

    Чтобы вывести такое меню с подсчётом кол-ва элементов в каждой подкатегории можно конечно пройтись циклом по всем подкатегориям и получить кол-во товаров через $hierarchy->getChildsCount($id) в API.

    Но тут упираемся в возможное развлетвление дерева подкатегорий, что заставит нас в цикле проходить по каждой подкатегории. Бывает, что подсчёт нужно делать с определёнными условиями.

    Короче, нужна обычная, стандартная группировка mysql.

    Реализовать это в настоящем времени можно лишь кастомным решением:

    Поехали. Ниже приведён пример подсчёта кол-ва товаров по принадлежности к определённому бренду. При этом бренд это поле с "выпадающим списком".

    	// Вывод списка брендов для Категорий каталога товаров
    	public function brandlist($category_id, $template = "default", $i_need_deep = 10, $fieldname='brand') {
    		$hierarchy = umiHierarchy::getInstance();
    		$hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName("catalog", "object")->getId();
    
    		$fields_filter = getRequest('fields_filter');
    
    		list($template_block, $template_block_line, $template_block_empty) = def_module::loadTemplates("./tpls/filtered_pages/{$template}.tpl", 
    			"pages_block", "pages_block_line", "pages_block_empty");
    
    		$type_id = $hierarchy->getDominantTypeId($category_id, $i_need_deep, $hierarchy_type_id);
    
    		$o_object_type = umiObjectTypesCollection::getInstance()->getType($type_id);
    		//$s='';
    		if( $i_field_id = $o_object_type->getFieldId($fieldname)) {
    			$field = umiFieldsCollection::getInstance()->getField($i_field_id);
    			if($guide_id = $field->getGuideId()) {
    				$link = umiHierarchy::getInstance()->getPathById($category_id);
    				$guide_items = umiObjectsCollection::getInstance()->getGuidedItems($guide_id);
    
    				$sql = "SELECT rel_val, COUNT(rel_val) AS cnt FROM (SELECT DISTINCT 
    	  h.id, c2.rel_val
    	FROM
    	  cms3_hierarchy_relations hr,
    	  cms3_objects o,
    	  cms3_hierarchy h,
    	  cms3_object_content c1,
    	  cms3_object_content c2 
    	WHERE h.obj_id = o.id 
    	  AND h.is_deleted = '0' 
    	  AND (
    		c2.obj_id = o.id 
    		AND c2.field_id = '{$i_field_id}'
    	  ) 
    	  AND (
    		(
    		  hr.child_id = h.id 
    		  AND (
    			hr.rel_id = '{$category_id}' 
    			AND hr.level <= '{$i_need_deep}'
    		  )
    		)
    	  ) 
    	  AND h.is_active = '1' 
    	  AND h.type_id IN ('{$hierarchy_type_id}') 
    	  AND c1.obj_id = c2.obj_id 
    	 ORDER BY h.ord DESC ) AS s
    	GROUP BY rel_val";
    				$res = mysql_query($sql);
    				$block_arr = array();
    				$items = array();
    				while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
    					$item_id = $row['rel_val'];
    					$object=umiObjectsCollection::getInstance()->getObject($item_id);
    					if($object instanceof umiObject) 
    						$item_name = $object->getName();
    					else
    						$item_name = 'NoName';
    					$cnt = $row['cnt'];
    
    					$sel='';
    					if ($fields_filter and $fields_filter[$fieldname] and $fields_filter[$fieldname] == $item_id) 
    						$sel='sel';
    					$item = array(
    						'attribute:id'		=> $item_id,
    						'attribute:object_id'		=> $item_id,
    						'attribute:link'	=> $link,
    						'attribute:fieldname'			=> $fieldname,
    						'attribute:cnt'			=> $cnt,
    						'node:name'			=> $item_name,
    						'attribute:sel'		=> $sel
    					);
    					$items[] = def_module::parseTemplate($template_block_line, $item, $item_id);
    				}
    				if(count($items) > 0) {
    					$block_arr['subnodes:items'] = $items;
    					$template = $template_block;
    				}else
    					$template = $template_block_empty;
    				return def_module::parseTemplate($template, $block_arr);
    
    			}
    		}
    		return false;
    	}
    
    

    Результатом выполнения макроса будет:

    
    
    Elle
    Ist`a
    Joli
    Monella
    Migura
    De Luna
    Sonia Spencer
    Pure
    AS
    Hot Diamonds
    Swarovski Elements
    Shablool
    
    
    
    

    Комментарии: