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

Изменил название первого пункта на «Каталог товаров» и нажал «Применить». Настройки «Партнёрам» не трогал. После сохранения у него стало «[без условия]», в 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 или резервной копии. Простое переключение режима стёртые выражения не вернёт. Перед повторной проверкой расширенной формы на своём сайте сделайте копию меню: проверка тоже меняет файл.
Не сходится?
Спросите Домового: он знает документацию и материалы сайта по этой теме. Ответит сразу.
Нужен живой разбор?
Консультация автора BXMax: созвон один на один, 90 минут на вашу задачу по теме «Редактор меню стирает условия после обновления main 26.1000.0».
Комментарии (0)
Пожалуйста, войдите в аккаунт, чтобы оставить комментарий
Оставить комментарийЗагрузка...
Пока нет ни одного комментария. Будьте первым!
Похожие советы