#меню

Советы с тегом «меню»

1 совет

Редактор меню стирает условия после обновления main 26.1000.0

Редактор меню стирает условия после обновления main 26.1000.0

Переименовали пункт меню, нажали «Применить», и на сайте появились ссылки, которые раньше были скрыты условием. На стенде «Управление сайтом» с main 26.1000.0 и fileman 26.0.0 это воспроизводится в расширенном редакторе меню.

Для проверки я создал два пункта: «Каталог» без условия и «Партнёрам» с условием «Для папки или файла» /partners/. За пределами этой папки компонент bitrix:menu показывал только каталог. В админке открыл «Контент → Структура сайта → Файлы и папки», перешёл в папку тестового раздела и открыл его меню в расширенном режиме.

До сохранения у пункта «Партнёрам» задано условие по папке /partners/

Изменил название первого пункта на «Каталог товаров» и нажал «Применить». Настройки «Партнёрам» не трогал. После сохранения у него стало «[без условия]», в PHP-файле пятый элемент пункта превратился в пустую строку, а на тестовой странице появилась ссылка «Партнёрам».

После изменения названия соседнего пункта условие «Партнёрам» исчезло

Причина в несовместимости двух модулей. В main/include/condition.php функция ConditionCompose() теперь ждёт вторым аргументом тип условия: folder, ugroups, php и другие. В fileman/admin/fileman_menu_edit.php остался вызов с номером пункта: ConditionCompose(${"condition_$num"}, $num). Номер не совпадает с типом, функция возвращает null, а CFileMan::SaveMenu() записывает пустое условие. Расширенная форма пересобирает пункты целиком, поэтому страдают и те, которые редактор не менял.

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

Для изменения самого условия нажмите «Редактировать как файл» в верхней панели редактора меню. Откроется PHP-редактор файла .top.menu.php или файла другого типа меню. Сначала сохраните его копию. Условие находится в пятом элементе пункта; например:

        <?php
declare(strict_types=1);

// Условие показа — пятый элемент пункта меню.
$aMenuLinks = [
    ['Каталог товаров', '/catalog/', [], [], ''],
    ['Партнёрам', '/partners/', [], [], "CSite::InDir('/partners/')"],
];

    

Этот файл я сохранил через PHP-редактор админки: условие восстановилось, и bitrix:menu снова скрыл «Партнёрам» вне /partners/. После такой правки не пересохраняйте меню в расширенной форме.

Важно: Условие меню управляет видимостью ссылки. Права на страницу проверяются отдельно; закрытый раздел должен иметь собственное ограничение доступа.

Если меню уже сохранили с потерей условий, восстановите их из копии файла, Git или резервной копии. Простое переключение режима стёртые выражения не вернёт. Перед повторной проверкой расширенной формы на своём сайте сделайте копию меню: проверка тоже меняет файл.

Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…

Можно закрыть чат и перейти на другую страницу. Когда ответ будет готов, на кнопке Домового появится отметка.

Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти