Группировки по-умолчанию в юми нет. Как же тогда получить подобное меню?
Чтобы вывести такое меню с подсчётом кол-ва элементов в каждой подкатегории можно конечно пройтись циклом по всем подкатегориям и получить кол-во товаров через $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
Комментарии: