Ответы на вопросы
Тут пока пусто...
...но мы ждем ваши вопросы
Если вы работаете с Bitrix, то наверняка сталкивались с ситуацией: в каталоге, блоге или меню красуются пустые разделы. С точки зрения UX это полный провал - пользователь кликает на раздел, а там ничего. В лучшем случае лёгкое раздражение, в худшем - потерянный клиент.
Если вы работаете с Bitrix, то наверняка сталкивались с ситуацией: в каталоге, блоге или меню красуются пустые разделы. С точки зрения UX это полный провал - пользователь кликает на раздел, а там ничего. В лучшем случае лёгкое раздражение, в худшем - потерянный клиент.
Хорошая новость: Bitrix позволяет спрятать такие «пустышки», и здесь мы разберём, как именно это делается. Будем говорить просто и по делу, но технические детали никуда не денем, ведь именно они решают задачу!
За вывод списка разделов отвечает компонент bitrix:catalog.section.list. Он может вызываться в любом месте сайта - просто на странице (например, на главной странице интернет-магазина), на корневой странице каталога, блога сайта, списка услуг, на странице раздела каталога или ранее упомянутых разделов сайта.
У этого компонента есть четыре интересующих нас параметра.
Пример использования:
// переменная обязательно должна быть глобальной и такой, чтобы не пересекаться названием с другими в массиве $GLOBALS
global $elementCountFilter;
// определяем дополнительные условия фильтрации в зависимости от того, какие товары нужно считать
switch ($arParams["COUNT_ELEMENTS_FILTER"])
{
case "CNT_ALL":
break;
case "CNT_ACTIVE":
$elementCountFilter["ACTIVE"] = "Y";
$elementCountFilter["ACTIVE_DATE"] = "Y";
break;
case "CNT_AVAILABLE":
$elementCountFilter["ACTIVE"] = "Y";
$elementCountFilter["ACTIVE_DATE"] = "Y";
$elementCountFilter["AVAILABLE"] = "Y";
break;
}
$APPLICATION->IncludeComponent(
"bitrix:catalog.section.list",
"",
array(
"COUNT_ELEMENTS" => "Y", // считать количество элементов в разделах
"ADDITIONAL_COUNT_ELEMENTS_FILTER" => "elementCountFilter", // указываем название переменной,
"COUNT_ELEMENTS_FILTER" => "CNT_ACTIVE", // количество каких товаров считаем - активных
"HIDE_SECTIONS_WITH_ZERO_COUNT_ELEMENTS" => "N", // скрывать разделы без элементов? - Нет, показывать
"VIEW_MODE" => "TEXT",
"SHOW_PARENT_NAME" => "Y",
"IBLOCK_TYPE" => "",
"IBLOCK_ID" => "",
"SECTION_ID" => $_REQUEST["SECTION_ID"],
"SECTION_CODE" => "",
"SECTION_URL" => "",
"TOP_DEPTH" => "2",
"SECTION_FIELDS" => "",
"SECTION_USER_FIELDS" => "",
"ADD_SECTIONS_CHAIN" => "Y",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "36000000",
"CACHE_NOTES" => "",
"CACHE_GROUPS" => "Y"
)
);
Если шаблоном компонента заложено отображение количества элементов в разделах, то при установленном значении «Y» (галочка в визуальных настройках компонента) это количество будет отображаться. Но главное: этот параметр напрямую включает механизм скрытия разделов. Если поставить «N», разделы не будут скрываться даже при включенных остальных параметрах (например, через редактирование массива параметров при подключении компонента).
Далее нужно установить галочку (через визуальные настройки компонента, или указать значение «Y») для параметра «Скрывать разделы с нулевым количеством элементов». Выбираем, какие товары считать: все, только активные или только доступные. Вариант «доступные» уместнее всего для каталога, потому что опирается на данные Торгового каталога, которого у статей быть не может.
При выборе «доступных товаров» будут отображены те разделы, в которых есть хотя бы один активный элемент, у которого в настройках Торгового Каталога указано ненулевое количество остатка. Соответственно будут скрыты разделы, в которых:
При выборе «активных товаров» будут отображены разделы, в которых есть активные элементы, при этом не имеет значения количество их остатка (если инфоблок является Торговым Каталогом). Будут скрыты разделы, в которых нет активных элементов.
При выборе «всех» отображаются все разделы, в которых есть любые элементы - без разницы активные или нет, доступные к покупке или нет. Скрываются только разделы, где элементов нет вообще.
Меню инфоблоков выводится через файл с названием <тип_меню>.menu_ext.php. В нём вызывается специальный компонент bitrix:menu.sections.
Стандартно он не поддерживает скрытие пустых разделов. Но не стоит разочаровываться - его можно доработать.
Если вы не обладаете достаточными навыками PHP, лучше обратится за помощью к программистам. Мы с радостью поможем вам с этой задачей в рамках услуги по доработке сайтов.
«Под капотом» этот компонент использует API Bitrix Framework, а именно метод CIBlockSection::GetList(). У него есть параметр bIncCnt, который позволяет подсчитывать количество элементов раздела при выборке. При использовании этого параметра со значением true становятся доступны дополнительные поля.
Если вы ранее использовали API Bitrix Framework, то вам не составит труда доработать компонент самостоятельно.
Аналогичную процедуру с доработкой компонента динамических разделов инфоблока можно провести с компонентом у готового решения Некстайп: Альфа.
Для других готовых решений процедура может немного отличаться, но так как все подобные компоненты внутри используют один и тот же базовый API Bitrix Framework, то доработать можно любое готовое решение.
Настройте HIDE_SECTIONS_WITH_ZERO_COUNT_ELEMENTS и выберите корректный COUNT_ELEMENTS_FILTER под ваш кейс.
Результат чистая, честная навигация: пользователи видят только то, где действительно есть контент или товар, а вы получаете аккуратный интерфейс без «мёртвых» разделов.
76 просмотров
4 марта 2025
1102
10 января 2025
719
29 октября 2024
1846
22 октября 2024
4161
12 августа 2024
1566
Тут пока пусто...
...но мы ждем ваши вопросы