Битрикс: как скрыть пункты меню с пустыми разделами?
Компонент bitrix:menu. Нужно отображать в меню только те разделы, в которых есть элементы (а еще лучше активные элементы). Как я понял, никаких галочек и простых решений не существует. Погуглил, вот что предлагают:
1. Использовать init.php
2. В копии шаблона компонента "menu" через getlist узнать количество
3. Скопировать компонент полностью и добавить в массив свойство ELEMENT_CNT
Какое решение лучше? Есть еще способы? Проще ли из catalog.section.list сделать фиксированное меню?
Нужно чтобы меню не прыгало по разделам. Просто фиксированное меню на всех страницах (элемент раздела, список разделов, конечный подраздел).
Насколько я понимаю, нужно сделать вывод компонента в section.php, sections.php и element.php, указать DEPTH_LEVEL = 1, прописать условие по пустым элементам. Этого будет достаточно или надо еще бороться с битриксом?
init.php - плохая идея. Туда надо ставить только совершенно необходимые обработчики, которые будут на каждом хите работать.
getlist в шаблоне - тоже плохо. Как с кешированием быть? Да и логика должна быть разделена. Как максимум все химикалии должны быть в result_modifier.php или component_epilog.php. А лучше в component.php.
А вот написать свой компонент - это нормально, да.
Напишите скрипт, который будет проходиться по всем разделам и деактивировать пустые разделы. В случае, если в деактивированном разделе появились элементы, то активировать обратно. Запускайте скрипт по крону.
Лучше меню каталога сделать на catalog.section.list
В самом шаблоне делаете проверку, если количество элементов = 0 тогда скрываете пункт
style="display:none;"<?else:?><?endif;?>>