Не удалось обнаружить код вызова компонента - разбор причин
Редактор пишет, что не удалось обнаружить код вызова компонента, хотя вызов на странице есть. Разбираем причины по убыванию частоты, начиная с оформления кода.
С чего начать
Смотрим, как оформлен сам вызов на странице:
<?/**/?><?$APPLICATION->IncludeComponent('bitrix:news.list', 'main', [ 'IBLOCK_ID' => 5,]);?><!-- вызов живёт в отдельных тегах, а разделитель перед ним помогает редактору -->Редактор ищет вызов разбором файла, а не выполнением кода. Вызов, слепленный с соседним кодом в одних тегах, он находит не всегда, и настройки компонента перестают открываться прямо из страницы.
Проверяем кодировку файла страницы:
file -I /home/bitrix/www/news/index.php # ожидаем charset=utf-8iconv -f utf-8 -t utf-8 /home/bitrix/www/news/index.php > /dev/null || echo 'битые символы'# файл в другой кодировке редактор разбирает неверно и вызова не видитКодировка страницы обязана совпадать с кодировкой сайта. Файл, сохранённый чужим редактором в другой кодировке, выглядит нормально на витрине и ломает разбор страницы административным интерфейсом.
Ищем повторяющиеся вызовы одного компонента:
grep -c "IncludeComponent('bitrix:news.list'" /home/bitrix/www/news/index.php# несколько одинаковых вызовов подряд редактор различает плохоПроверяем права на файл страницы:
ls -l /home/bitrix/www/news/index.phpsudo chown bitrix:bitrix /home/bitrix/www/news/index.php # владелец - пользователь сайта# без права на запись параметры некуда сохранять, и редактор отказывается их открыватьИщем невалидную разметку рядом с вызовом:
grep -n '<!--\|-->' /home/bitrix/www/news/index.php | head# незакрытый комментарий съедает часть файла при разборе страницы редакторомПричины
-
Вызов оформлен не отдельными тегами примерно 30% случаев
ПризнакВызов компонента стоит внутри общего блока кода вместе с другими строками.
ПроверкаОткрываем файл страницы и смотрим, отделён ли вызов собственными тегами языка.
Что делатьВыносим вызов в отдельные теги и ставим перед ним служебный разделитель для редактора.
-
Кодировка файла не совпадает с кодировкой сайта примерно 20% случаев
ПризнакСтраница на витрине выглядит нормально, а в редакторе параметры не открываются.
ПроверкаСмотрим кодировку файла командой определения типа и проверяем его на битые символы.
Что делатьПересохраняем файл в кодировке сайта и проверяем настройки своего редактора кода.
-
Нет прав на запись в файл страницы примерно 20% случаев
ПризнакОшибка появляется у всех страниц одного каталога, а не у одной конкретной.
ПроверкаСмотрим владельца и права файла и сравниваем их с пользователем веб-сервера.
Что делатьВозвращаем владельца и права каталогу публичной части после выкладки или переноса.
-
На странице невалидная разметка примерно 15% случаев
ПризнакПроблема появилась после правки вёрстки страницы или вставки чужого кода.
ПроверкаИщем незакрытые комментарии и теги рядом с вызовом компонента в файле страницы.
Что делатьЧиним разметку: разбор страницы редактором ломается на первом же незакрытом фрагменте.
-
Несколько одинаковых вызовов подряд примерно 15% случаев
ПризнакНастройки открываются не у того компонента или не открываются у второго вызова.
ПроверкаСчитаем число одинаковых вызовов компонента в файле одной командой поиска.
Что делатьРазносим вызовы по включаемым областям или задаём им разные шаблоны и параметры.
Частые вопросы
Можно ли править параметры прямо в файле?
Да, и для разработчика это быстрее визуального редактора. Ошибка редактора при этом остаётся, и её всё равно чинят: параметры правит и контент-менеджер.
Почему ошибка появилась после выкладки?
Скорее всего сменился владелец файлов или кодировка при переносе. Проверяют права каталога публичной части и кодировку изменённых страниц.
Мешает ли эта ошибка работе сайта?
Нет, витрина работает как прежде: разбор страницы нужен только редактору. Чинить всё равно стоит, иначе правки параметров ложатся на разработчика.
Что за служебный разделитель перед вызовом?
Пустой блок кода, который отделяет вызов компонента от предыдущего кода страницы. Он помогает разбору и ничего не выводит на витрине.
Как избежать проблемы на новых страницах?
Держать вызовы компонентов отдельными блоками и не смешивать их с вёрсткой. Сложные страницы собирают из включаемых областей, а не из одного длинного файла.
Смежное
- Кастомизация компонента - оглавление подтемы
- Правки шаблона компонента не видны: разбор причин - соседний разбор с кэшем и копиями
- Шаблон чужого компонента: копия вместо правки исходника - правильная работа с чужим компонентом
- Включаемые области: текст и код в шаблоне без правки файлов - куда выносят части страницы
- Права на файлы и папки: файловая система и права структуры - владелец файлов публичной части
- После выкладки сайт сломался: разбор причин - что ещё ломает выкладка
- Компоненты и шаблоны - устройство компонентов целиком