Генерация дерева групп в интернет-магазине возможна в нескольких режимах - all, tree, current. Часто бывает необходимо сократить XML, чтобы в выборку пошли текущие подгруппы и их подгруппы, предлагаю реализацию с использованием нового параметра $param['xml_show_group_id'], в который помещаем ID групп от текущего уровня до корня, текущие подгруппы в группе и их подгруппы. ID текущей группы содержится в $param['current_group_id'].
Предложенный метод будет работать частично с версии 5.8.5, полностью в 5.8.6:
// Обязательно включаем корень
$xml_show_group_id = array(0);
$parent_group_id = $param['current_group_id'];
// Выбираем группы от текущей группы до корня
while($parent_group_id != 0)
{
$xml_show_group_id[] = $parent_group_id;
$group_row = $shop->GetGroup($parent_group_id);
if ($group_row)
{
$parent_group_id = $group_row['shop_groups_parent_id'];
}
else
{
break;
}
}
// Выбираем группы 1-го уровня для ограничения формирования XML
// Если группы 1-го уровня не нужны, то закомментируйте этот блок
$resource = $shop->GetGroups($current_shop_id, 0);
while($row = mysql_fetch_assoc($resource))
{
$xml_show_group_id[] = $row['shop_groups_id'];
}
// Выбираем только непосредственные подгруппы
/*$subgroup = $shop->GetAllGroups($current_shop_id, array ('shop_groups_parent_id' => $param['current_group_id']));
foreach ($subgroup as $row)
{
$xml_show_group_id[] = $row['shop_groups_id'];
}*/
// Выбираем по дереву все подгруппы текущей группы
$mas_group = $shop->GetGroupsTree($param['current_group_id'], $current_shop_id);
$xml_show_group_id = SetGroups($mas_group, $xml_show_group_id);
$param['xml_show_group_id'] = $xml_show_group_id;
$param['xml_show_group_property'] = false;
$param['xml_show_tags'] = false;
$param['xml_show_group_type'] = 'all';
$shop->ShowShop($current_shop_id, $xsl_catalog, $param, external_propertys);