Правки шаблона компонента не видны - разбор причин
Файл шаблона изменён и сохранён, а страница показывает прежнюю вёрстку. Разбираем причины по убыванию частоты, начиная с поиска настоящего файла.
С чего начать
Находим шаблон, который сайт действительно выводит:
// временно в шаблоне компонентаecho '<!-- ', __FILE__, ' -->';// строка в исходном коде страницы называет файл, который реально отработалecho '<!-- ', $templateFolder, ' -->'; // каталог шаблона целикомecho '<!-- ', SITE_TEMPLATE_ID, ' -->'; // заодно видно шаблон сайтаКомментарий с именем файла отвечает на вопрос за один обновлённый экран. В половине случаев правится копия в одном каталоге, а работает файл из другого.
Смотрим, какие копии шаблона вообще существуют:
find /home/bitrix/www -path '*components/bitrix/news.list/*' -name template.php | head# копия в своём каталоге и в шаблоне сайта перекрывает штатную# приоритет: шаблон сайта, затем каталог решений, затем ядроОдинаковых файлов на сайте обычно несколько. Правка штатного шаблона в каталоге ядра вдобавок не переживёт обновления продукта, поэтому найденную копию стоит проверить и по пути, и по дате изменения.
Сбрасываем кэш нужного компонента:
$cache = \Bitrix\Main\Data\Cache::createInstance();$cache->cleanDir('/' . SITE_ID . '/news.list'); // каталог кэша компонента// изменения в файле обработки результата видны только после сброса кэша// на время разработки время жизни кэша уменьшают, а не выключают его совсемФайл доработки результата выполняется вместе со сборкой данных. Пока кэш компонента годен, он не вызывается вовсе, и правки в нём выглядят как ничего не делающие.
Проверяем объединение стилей и скриптов:
printf("объединение css=%s js=%s\n", COption::GetOptionString('main', 'optimize_css_files', 'N'), COption::GetOptionString('main', 'optimize_js_files', 'N'));// при включённом объединении браузер получает собранный файл, а не вашОбъединение собирает статику в один файл и обновляет его не мгновенно. На время разработки его выключают, иначе правка стилей проверяется по чужому, уже собранному файлу.
Причины
-
Правится не тот файл примерно 30% случаев
ПризнакКомментарий с именем файла в исходном коде страницы называет другой путь.
ПроверкаПечатаем имя выполняемого файла прямо в шаблоне и сравниваем с тем, что открыто в редакторе.
Что делатьПравим найденную копию, а лишние копии удаляем: их существование запутывает и дальше.
-
Страница отдаётся из кэша компонента примерно 25% случаев
ПризнакПравки вёрстки видны, а изменения в обработке результата - нет.
ПроверкаСбрасываем кэш конкретного компонента и обновляем страницу ещё раз.
Что делатьСбрасываем кэш после правок, а на время разработки уменьшаем время его жизни.
-
Файлы стилей и скриптов отдаются объединёнными примерно 20% случаев
ПризнакРазметка обновилась, а оформление осталось прежним, в исходном коде один общий файл.
ПроверкаСмотрим настройки объединения и сжатия статики в настройках главного модуля.
Что делатьВыключаем объединение на время разработки: собранный файл обновляется не сразу.
-
Правится штатный шаблон, а работает своя копия примерно 15% случаев
ПризнакВ каталоге ядра файл изменён, на странице выводится другая разметка.
ПроверкаИщем копию шаблона в каталоге решений и в шаблоне сайта: они перекрывают штатный.
Что делатьПереносим правки в свою копию: файлы ядра при обновлении продукта возвращаются к исходным.
-
Страница собрана композитом примерно 10% случаев
ПризнакГость видит старую страницу, а под своей учётной записью всё правильно.
ПроверкаОткрываем страницу в окне без входа на сайт и сравниваем с обычным просмотром.
Что делатьСбрасываем композитный кэш: готовая страница отдаётся до выполнения кода компонента.
Частые вопросы
Почему правки в файле доработки результата не применяются?
Он выполняется только при сборке данных компонента. При годном кэше сборки не происходит, и файл не вызывается: сначала сбрасывают кэш.
Где лежит правильная копия шаблона?
В каталоге шаблона сайта или в каталоге решений, в зависимости от того, где её завели. Приоритет у шаблона сайта, а файлы ядра трогать не следует вовсе.
Стоит ли выключать кэш на время разработки?
Проще уменьшить время его жизни и сбрасывать кэш после правок. Полное отключение меняет поведение сайта и прячет ошибки, которые проявятся на боевом.
Почему заголовок страницы не тот, что задан в шаблоне?
Код после подключения шаблона выполняется позже эпилога компонента и перетирает заголовок. Заголовок задают в одном месте, а не в двух.
Почему меняется вёрстка только у части страниц?
У компонента несколько шаблонов, и разные страницы вызывают разные. Имя шаблона видно в параметрах вызова компонента на странице.
Смежное
- Компонент изнутри: вызов, кэш, шаблон, эпилог - почему правка результата уезжает в кэш
- Кастомизация компонентов - оглавление подтемы
- Шаблон сайта не применяется: разбор причин - тот же разбор для шаблона сайта
- Не удалось обнаружить код вызова компонента: разбор причин - когда не открываются сами параметры
- Свой компонент не подключается: разбор причин - если своего компонента нет на странице вовсе
- Меню показывает не то: разбор причин - частный случай на меню
- Заголовок и метатеги не те: разбор причин - когда неверен заголовок, а не вёрстка
- Шаблон чужого компонента: копия, доработка результата, эпилог - как правильно копировать шаблон
- Компонент не отдаёт нужных данных: причины по убыванию частоты - когда дело не в вёрстке, а в данных
- Правка не видна на сайте: какой кэш сбросить - все уровни кэша сайта
- Стили и скрипты в шаблоне: подключение, порядок, кэш - объединение и метка версии
- Композит не включается на странице: причины по убыванию частоты - соседний механизм кэша страниц
- Компоненты 2.0 - устройство компонентов целиком
- Кастомизация изнутри: поиск шаблона, переопределение, кэш - порядок файлов шаблона и кэш