Предположим ситуацию, когда при выводе информационной системе нам необходимо получить не только группы текущего уровня, но и подгруппы этого уровня. Казалось бы задача легко решается:
// Параметр, определяющий источник выборки
$property['xml_show_group_type'] = 'all';
// Передаем текущую группу, как дополнительный параметр
$external_propertys['parent_group_id'] = $GLOBALS['INFSYS_result']['group'];
// Вызываем отображение информационной системы, но в качеству текущей группы (второй параметр) передаем false
$InformationSystem->ShowInformationSystem ($InformationSystem_id, false, $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);
Все хорошо, но только до тех пор, пока количество групп не очень большое. С наполнением сайта генерируемый XML-файл быстро разрастается в размерах, а время генерации страницы растягивается на долгие секунды. Конечно, многое зависит от используемого сервера, от сложности XSLT-шаблона, но не настолько сильно, чтобы можно было простить такое отношение к ресурсам.
// Создаем массив, в котором будем хранить идентификаторы выводимых групп
$xml_show_group_id = array (0);
// Передаем текущую группу, как дополнительный параметр
$parent_group_id = $GLOBALS['INFSYS_result']['group'];
/* Обходим все родительские группы, начиная от текущей, заканчивая корневой. Для правильного формирования XML-дерева требуется получить полный «путь». Окончанием цикла будет считать группу с нулем идентификатором — корневая группа */
while ($parent_group_id! = 0)
{
$xml_show_group_id[] = $parent_group_id;
$group_row = $InformationSystem->GetInformationGroup ($parent_group_id);
if ($group_row) {
$parent_group_id = $group_row['information_groups_parent_id'];
} else {
break;
}
}
// Добавляем текущую группу в массив выводимых групп
$xml_show_group_id[] = $GLOBALS['INFSYS_result']['group'];
// Получаем подгруппы текущей группы
$param_cuter['information_system_id'] = $InformationSystem_id;
$param_cuter['groups_parent_id'] = $GLOBALS['INFSYS_result']['group'];
$subgroup = $InformationSystem->GetAllInformationGroups ($param_cuter);
// Добавляем идентификаторы полученных групп в наш массив
foreach ($subgroup as $row)
{
$xml_show_group_id[] = $row['information_groups_id'];
}
// Передаем массив выводимых групп в качестве параметра функции, отображающей информационную систему
$property['xml_show_group_id'] = $xml_show_group_id;
$property['xml_show_group_type'] = 'all';
$InformationSystem->ShowInformationSystem ($InformationSystem_id, $GLOBALS['INFSYS_result']['group'], $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);
Как видите, по большому счету ничего сложного. К сожалнию, документация к API не разбита на категории, а просто отсортированная по алфавиту. Поэтому сразу разобраться, как
что-то сделать лучше, не всегда удается.