Расширение функционала API готового решения Allcorp3
В рассмотрении
Доработка касается удобства выборки разделов и элементов с помощью метода
TSolution\Functions::getSectionsWithElementCount()Такое пожелание возникло при доработке отображения разделов в зависимости от выбранного и привязанного к разделу региона.
В шаблоне blog компонента bitrix:news в файлах news.php, section.php, detail.php есть фрагмент кода, который получает разделы с количеством элементов в них и теги (листинг 1). Если почитать код этого метода, то там используется такая конструкция, которая поддерживает передачу дополнительных фильтров для разделов и элементов в них:
$arExtParams = array(
'IBLOCK_ID' => $iblock_id,
'MENU_PARAMS' => $arMenuParametrs,
// custom filter for sections (through array_merge)
'SECTION_FILTER' => $regionSectionFilter,
'SECTION_SELECT' => array(), // custom select for sections (through array_merge)
'ELEMENT_FILTER' => array(), // custom filter for elements (through array_merge)
'ELEMENT_SELECT' => array(), // custom select for elements (through array_merge)
'MENU_TYPE' => 'catalog',
);
CAllcorp3::getMenuChildsExt($arExtParams, $aMenuLinksExt);Листинг 1 - Получение списка разделов в компоненте bitrix:news с шаблоном blog
Также, такая конструкция используется в файлах расширенного меню (например, .left.menu_ext.php). В дополнительный фильтр можно передать фильтр со сложной фильтрацией, который выберет только те разделы, которые доступны в выбранном регионе (Листинг 2):
global $arRegion;
/**
* В defines.php шаблона глобальная переменная arRegionLink объявляется только тогда, когда включена региональность.
* @author Leonid Bychkov
*/
$regionSectionFilter = [];
if (!empty($GLOBALS["arRegionLink"])) {
$regionSectionFilter = array(
array(
"LOGIC" => "OR",
array("UF_LINK_REGION" => $arRegion["ID"]),
array("UF_LINK_REGION" => false)
),
);
}Листинг 2 - Сложный фильтр для выбора разделов только с текущим регионом, или к которым регион не привязан
Само предложение: давайте добавим в метод TSolution\Functions::getSectionsWithElementCount() передачу дополнительных фильтров для разделов и элементов, ведь у него внутри также вызывается метод CAllcorp3::getMenuChildsExt(), который поддерживает такие фильтры. Поддерживающий фильтры метод вызывается по цепочке getSectionsWithElementCount() -> getSectionsForMenu() -> getMenuChildsExt()
Понравилась
Комментарии на данной страницы заблокированы!