Родительская категория (0)
Подкатегория 1 (n)
Товары подкатегории 1
Подкатегория 2 (n)
Товары подкатегории 2
-----------------------------------
В родительской 0 товаров
В подкатегориях n товаров.
-----------------------------------
Реализовано на Hostcms 5. Требуется реализовать на 6.
В типовой динамической 5, вставлен соответствующий код.
У категорий есть дополнительное св-во, следовательно в динамической проверка идет, если стоит 1 в св-ве, то показывается соответствующий xsl (показ товаров подкатегорий)
В начале кода тип. динам.
Функция получения подгрупп
function getAllSubGroups($start_groups_id, $current_shop_id, $shop, $groups = array())
{
// получим число групп и элементов в текущей группе и ее подгруппах.
// подробнее см. API
$count_groups = $shop->GetCountItemsAndGroups($start_groups_id, $current_shop_id, true);
// если есть подгруппы
if ($count_groups['count_groups'] > 0) {
// получим ресурс с подгруппами текущей группы
$resource = $shop->GetGroups($current_shop_id, $start_groups_id);
// обработаем его
while ($row = mysql_fetch_assoc($resource)) {
// итеративно вызовем функцию getAllSubGroups на случай если у рассматриваемой группы
// тоже есть подгруппы
$groups = getAllSubGroups($row['shop_groups_id'], $current_shop_id, $shop, $groups);
// добавим в массив группу id рассматриваемой группы
$groups[] = $row['shop_groups_id'];
}
}
return $groups;
}
в конце кода перед $shop->ShowShop
// Получаем текущую группу
$param['shop_groups_id'] = $GLOBALS['shop_item_path']['group'];
//Указываем нужное св-во: 1 - первое доп.св-во, 2 - второе доп.св-во и т.д.
$param['shop_properties_group_id'] = 2;
//Получаем значение выбранного доп.св-ва для текущей группы
$property_row1 = $shop->GetPropertiesGroupValue($param);
if ($property_row1['shop_properties_group_value_value'] == 1)
{
// получим число групп и элементов в текущей группе и ее подгруппах.
// подробнее см. API
$count_groups = $shop->GetCountItemsAndGroups($GLOBALS['shop_item_path']['group'], $current_shop_id);
// если в текущей группе элементов нет, а в подгруппах есть
if ($count_groups['count_items'] == 0 && $count_groups['count_all_items'] >= 0) {
// передаим в xml признак того, что вывод будет происходить из подгрупп
$external_propertys['show_items_from_subgroups'] = 1;
$external_propertys['cur_group'] = $GLOBALS['shop_item_path']['group'];
if ($count_groups['count_groups'] > 0) {
// если у текущей группы есть подгруппы:
//то создаем массив
$groups = array();
//заполняем его деревом подгрупп
$groups = getAllSubGroups($GLOBALS['shop_item_path']['group'], $current_shop_id, $shop);
// добавляем в массив текущую группу
$groups[] = $GLOBALS['shop_item_path']['group'];
// передаем массив с подгруппами
$param['current_group_id'] = $groups;
}
}
$param['items_on_page'] = 1000;
//Установка xsl шаблона
$xsl_catalog = 'КаталогТоваровПодкатегорий';
}
$shop->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);
в результате отображались товары подгрупп у тех групп, где в св-ве стояла 1.
Как реализовать все это на 6 версии?
Для проверки соответствующего св-ва у группы придется использовать $linkedObject = Core_Entity::factory('Shop_Group_Property_List', $shop_id и queryBuilder ?
Что можно использовать вместо $shop->GetGroups($current_shop_id, $start_groups_id); ?
Вместо параметра show_items_from_subgroups, что можно использовать?
Заранее спасибо.