Меню показывает не то - разбор причин
В одном разделе меню пропало, в другом появились чужие пункты. Разбираем причины по убыванию частоты, начиная с поиска файлов меню.
С чего начать
Ищем файлы меню по дереву разделов:
find /home/bitrix/www -maxdepth 4 -name '.*.menu.php' -o -maxdepth 4 -name '.*.menu_ext.php' | headls -la /home/bitrix/www/catalog/.left.menu.php 2>/dev/null# поиск файла идёт снизу вверх и останавливается на первом найденном# тип меню задаётся вторым словом в имени файла и должен совпадать с параметромМеню ищется от текущего раздела вверх до корня и берётся первое найденное. Файл в подразделе перекрывает родительский полностью, даже когда внутри пусто.
Смотрим содержимое найденного файла:
$aMenuLinks = [ ['Каталог', '/catalog/', [], [], ''], ['Акции', '/catalog/sale/', [], [], 'CSite::InGroup([5])'], // условие показа];// пустой массив в файле означает пустое меню в этом разделе и нижеПустой файл меню - самая частая причина исчезнувшего меню. Он выглядит безобидно, но перекрывает родительское меню так же надёжно, как заполненный.
Проверяем параметры компонента:
$APPLICATION->IncludeComponent('bitrix:menu', 'horizontal', [ 'ROOT_MENU_TYPE' => 'left', 'MENU_CACHE_TYPE' => 'A', 'USE_EXT' => 'Y', // без этого динамическое меню не подключается 'MAX_LEVEL' => 3, // штатные шаблоны глубже четвёртого уровня не рисуют]);Тип меню в параметрах компонента должен совпадать с именем файлов. Опечатка в типе даёт пустое меню без единой ошибки, потому что искать компоненту просто нечего.
Причины
-
В подразделе лежит свой файл меню примерно 30% случаев
ПризнакВ одном разделе меню отличается от остальных или отсутствует целиком.
ПроверкаИщем файлы меню по дереву разделов от текущего вверх до корня сайта.
Что делатьУдаляем или заполняем лишний файл: поиск останавливается на первом найденном.
-
Файл меню пустой примерно 25% случаев
ПризнакМеню пропало в разделе и во всех вложенных разделах сразу.
ПроверкаОткрываем найденный файл и смотрим, есть ли в нём пункты.
Что делатьЗаполняем файл или убираем его совсем: пустой массив перекрывает родительское меню.
-
Не совпал тип меню примерно 20% случаев
ПризнакКомпонент выводит пустоту, хотя файл меню в разделе есть.
ПроверкаСравниваем тип меню в параметрах компонента с именем файла меню.
Что делатьПриводим тип к одному значению: статическое заменяется только статическим, динамическое - динамическим.
-
Динамическое меню не подключено примерно 15% случаев
ПризнакПункты из своего кода не появляются, статические выводятся нормально.
ПроверкаСмотрим наличие файла динамического меню и параметр его подключения у компонента.
Что делатьВключаем подключение динамических файлов: без этого параметра компонент их не читает.
-
Меню отдаётся из кэша примерно 10% случаев
ПризнакФайл меню изменён, а на сайте прежние пункты.
ПроверкаСбрасываем кэш меню и обновляем страницу ещё раз.
Что делатьСбрасываем кэш после правки файлов: меню кэшируется отдельно от страницы.
Частые вопросы
Почему меню пропало во всём разделе?
Скорее всего, в разделе появился пустой файл меню. Он перекрывает родительское меню целиком, и поиск вверх по дереву на нём останавливается.
Как добавить в меню пункты из инфоблока?
Файлом динамического меню, который собирает пункты кодом. У компонента при этом должно быть включено подключение таких файлов.
Почему не выводятся вложенные уровни?
Штатные шаблоны меню рисуют ограниченное число уровней. Для более глубокого дерева копируют шаблон компонента и дорабатывают разметку.
Откуда в меню лишний пункт?
Страница создавалась с включённой опцией добавления пункта меню. Она незаметно заводит собственное меню раздела и добавляет туда пункт.
Как скрыть пункт от части посетителей?
Условием показа в самом пункте меню: проверкой группы или авторизации. Права на раздел при этом всё равно проверяются отдельно.
Смежное
- Меню и хлебные крошки - оглавление подтемы
- Кэш меню: разрастание каталога, тяжёлые запросы, настройка - если дело в объёме и скорости кэша
- Раздел не выводится: разбор причин - когда пропал раздел, а не пункт меню
- Многоуровневое меню: свои пункты и вывод из инфоблока - как устроено меню
- Хлебные крошки: правка цепочки и свои элементы - соседний компонент навигации
- Правки шаблона компонента не видны: разбор причин - когда виноват кэш или копия шаблона
- Кэш не срабатывает: страница собирается заново каждый раз - кэш меню и страниц
- Права не применяются: разбор причин - когда пункт скрыт правами
- Шаблоны сайта - устройство шаблона целиком
- Меню изнутри: файлы, типы, сборка пунктов, кэш - как компонент выбирает файл меню