Расширение функционала 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()
Комментарии на данной страницы заблокированы!