Как скрыть пустые разделы в каталоге, блоге и меню на Bitrix - блог MediaMint

Если вы работаете с Bitrix, то наверняка сталкивались с ситуацией: в каталоге, блоге или меню красуются пустые разделы. С точки зрения UX это полный провал - пользователь кликает на раздел, а там ничего. В лучшем случае лёгкое раздражение, в худшем - потерянный клиент.

Если вы работаете с Bitrix, то наверняка сталкивались с ситуацией: в каталоге, блоге или меню красуются пустые разделы. С точки зрения UX это полный провал - пользователь кликает на раздел, а там ничего. В лучшем случае лёгкое раздражение, в худшем - потерянный клиент.

Хорошая новость: Bitrix позволяет спрятать такие «пустышки», и здесь мы разберём, как именно это делается. Будем говорить просто и по делу, но технические детали никуда не денем, ведь именно они решают задачу!

Скрытие пустых разделов при использовании специального компонента

За вывод списка разделов отвечает компонент bitrix:catalog.section.list. Он может вызываться в любом месте сайта - просто на странице (например, на главной странице интернет-магазина), на корневой странице каталога, блога сайта, списка услуг, на странице раздела каталога или ранее упомянутых разделов сайта.

Как скрыть пустые разделы в каталоге, блоге и меню на Bitrix

У этого компонента есть четыре интересующих нас параметра.

  • «Показывать количество элементов в разделе» (COUNT_ELEMENTS). Он принимает значения «Y» или «N». При значении «Y» будет показано количество элементов в разделе.
  • «Показывать количество» (COUNT_ELEMENTS_FILTER). Выбирается, для каких товаров показывать количество: активных, доступных или всех. Доступные значения: CNT_ACTIVE, CNT_AVAILABLE, CNT_ALL соответственно.
  • «Скрывать разделы с нулевым количеством элементов» (HIDE_SECTIONS_WITH_ZERO_COUNT_ELEMENTS). Принимает значения «Y» или «N». Если указать значение «Y», то разделы без элементов отображаться не будут.
  • «Дополнительный фильтр для подсчета количества элементов в разделе» (COUNT_ELEMENTS_FILTER). Здесь указывается название глобальной переменной, в которую передается параметры дополнительного фильтра для подсчета количества элементов в разделе. 

Пример использования:

				// переменная обязательно должна быть глобальной и такой, чтобы не пересекаться названием с другими в массиве $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"
    )
);

Почему COUNT_ELEMENTS критично важен?

Если шаблоном компонента заложено отображение количества элементов в разделах, то при установленном значении «Y» (галочка в визуальных настройках компонента) это количество будет отображаться. Но главное: этот параметр напрямую включает механизм скрытия разделов. Если поставить «N», разделы не будут скрываться даже при включенных остальных параметрах (например, через редактирование массива параметров при подключении компонента). 

Далее нужно установить галочку (через визуальные настройки компонента, или указать значение «Y») для параметра «Скрывать разделы с нулевым количеством элементов». Выбираем, какие товары считать: все, только активные или только доступные. Вариант «доступные» уместнее всего для каталога, потому что опирается на данные Торгового каталога, которого у статей быть не может.

Заполните форму и сделайте первый шаг к разработке или продвижению своего сайта!

Как с вами лучше связаться?

Отправляя заявку, вы принимаете условия и политику обработки персональных данных

result-icon

Отлично!

Заявка отправлена!
В скором времени с Вами свяжется наш эксперт.

При выборе «доступных товаров» будут отображены те разделы, в которых есть хотя бы один активный элемент, у которого в настройках Торгового Каталога указано ненулевое количество остатка. Соответственно будут скрыты разделы, в которых:

  • нет элементов вообще;
  • нет активных элементов;
  • нет активных элементов, у которых нулевой остаток в Торговом Каталоге.

При выборе «активных товаров» будут отображены разделы, в которых есть активные элементы, при этом не имеет значения количество их остатка (если инфоблок является Торговым Каталогом). Будут скрыты разделы, в которых нет активных элементов.

При выборе «всех» отображаются все разделы, в которых есть любые элементы - без разницы активные или нет, доступные к покупке или нет. Скрываются только разделы, где элементов нет вообще.

Скрытие пустых разделов в меню

Меню инфоблоков выводится через файл с названием <тип_меню>.menu_ext.php. В нём вызывается специальный компонент bitrix:menu.sections

Стандартно он не поддерживает скрытие пустых разделов. Но не стоит разочаровываться - его можно доработать.

Если вы не обладаете достаточными навыками PHP, лучше обратится за помощью к программистам. Мы с радостью поможем вам с этой задачей в рамках услуги по доработке сайтов.

«Под капотом» этот компонент использует API Bitrix Framework, а именно метод CIBlockSection::GetList(). У него есть параметр bIncCnt, который позволяет подсчитывать количество элементов раздела при выборке. При использовании этого параметра со значением true становятся доступны дополнительные поля.

  • ELEMENT_SUBSECTIONS - подсчитывать элементы вложенных подразделов или нет (Y|N, по умолчанию Y).
  • CNT_ALL – включать в подсчет неопубликованные элементы (Y|N, по умолчанию N). Актуально при установленном модуле документооборота.
  • CNT_ACTIVE - при подсчете учитывать активность элементов (Y|N, по умолчанию N). Учитываются флаг активности элемента ACTIVE и даты начала/окончания активности. 

Если вы ранее использовали API Bitrix Framework, то вам не составит труда доработать компонент самостоятельно.

Скрытие пустых разделов в меню на готовых решениях

Аналогичную процедуру с доработкой компонента динамических разделов инфоблока можно провести с компонентом у готового решения Некстайп: Альфа.

Для других готовых решений процедура может немного отличаться, но так как все подобные компоненты внутри используют один и тот же базовый API Bitrix Framework, то доработать можно любое готовое решение.

Вывод

  • Для списков разделов используйте bitrix:catalog.section.list и не забудьте включить COUNT_ELEMENTS = "Y" - это ключ к механизму скрытия.

    Настройте HIDE_SECTIONS_WITH_ZERO_COUNT_ELEMENTS и выберите корректный COUNT_ELEMENTS_FILTER под ваш кейс.

  • Для меню доработайте bitrix:menu.sections, подключив подсчёт через CIBlockSection::GetList() с bIncCnt = true и нужными флагами (ELEMENT_SUBSECTIONS, CNT_ALL, CNT_ACTIVE) - так пустые ветки не попадут в навигацию.

Результат чистая, честная навигация: пользователи видят только то, где действительно есть контент или товар, а вы получаете аккуратный интерфейс без «мёртвых» разделов.

eye

76 просмотров

Оценить:

1

Присмотритесь к нашим работам

Смотреть все кейсы

Вопрос к эксперту стрелка

Не нашли ответ на свой вопрос?
Задайте его нашему эксперту!

При публикации ответа E-mail опубликован не будет

result-icon

Отлично!

Наши эксперты ответят на Ваш вопрос в ближайшее время.

изображение формы

Ответы на вопросы

Тут пока пусто...

...но мы ждем ваши вопросы

MediaMint
Россия
Московская область
Королев
ул. Подмосковная, д.7
+7 (499) 444-25-70

ОШИБКА: Не задан URL картинки (заполните свойство Ссылка на картинку или Ссылка на миниатюру)

Блог веб-студии "MediaMint"

Статьи о разработке и создание продающих сайтов, а также про их продвижение в SEO и контекстной рекламе

MediaMint
Веб-студия MediaMint - разработка и создание авторских сайтов и на готовых решениях Битрикс, продвижение SEO и ведение контекстной рекламы, техническая поддержка сайтов и разработка интернет-магазинов и лендингов.
Россия
Московская область
Королёв
ул. Подмосковная, д.7
+7 (499) 444-25-70

Как вам удобнее начать общение по проекту?

Оставьте ваш номер, и мы перезвоним

Нажимая кнопку Оставить сообщение, вы соглашаетесь на обработку персональных данных

result-icon

Отлично!

Заявка отправлена! В скором времени с Вами свяжется наш эксперт.

Оставьте ваш номер, и мы перезвоним

Как с вами лучше связаться?

Нажимая кнопку Заказать звонок, вы соглашаетесь на обработку персональных данных

result-icon

Отлично!

Заявка отправлена! В скором времени с Вами свяжется наш эксперт.

Мы используем куки

Мы используем файлы cookie, чтобы обеспечить вам наилучшую работу на нашем веб-сайте.