Перейти к содержимому

Правки шаблона компонента не видны - разбор причин

Файл шаблона изменён и сохранён, а страница показывает прежнюю вёрстку. Разбираем причины по убыванию частоты, начиная с поиска настоящего файла.

С чего начать

Находим шаблон, который сайт действительно выводит:

// временно в шаблоне компонента
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'));
// при включённом объединении браузер получает собранный файл, а не ваш

Объединение собирает статику в один файл и обновляет его не мгновенно. На время разработки его выключают, иначе правка стилей проверяется по чужому, уже собранному файлу.

Причины

  1. Правится не тот файл примерно 30% случаев

    ПризнакКомментарий с именем файла в исходном коде страницы называет другой путь.

    ПроверкаПечатаем имя выполняемого файла прямо в шаблоне и сравниваем с тем, что открыто в редакторе.

    Что делатьПравим найденную копию, а лишние копии удаляем: их существование запутывает и дальше.

  2. Страница отдаётся из кэша компонента примерно 25% случаев

    ПризнакПравки вёрстки видны, а изменения в обработке результата - нет.

    ПроверкаСбрасываем кэш конкретного компонента и обновляем страницу ещё раз.

    Что делатьСбрасываем кэш после правок, а на время разработки уменьшаем время его жизни.

  3. Файлы стилей и скриптов отдаются объединёнными примерно 20% случаев

    ПризнакРазметка обновилась, а оформление осталось прежним, в исходном коде один общий файл.

    ПроверкаСмотрим настройки объединения и сжатия статики в настройках главного модуля.

    Что делатьВыключаем объединение на время разработки: собранный файл обновляется не сразу.

  4. Правится штатный шаблон, а работает своя копия примерно 15% случаев

    ПризнакВ каталоге ядра файл изменён, на странице выводится другая разметка.

    ПроверкаИщем копию шаблона в каталоге решений и в шаблоне сайта: они перекрывают штатный.

    Что делатьПереносим правки в свою копию: файлы ядра при обновлении продукта возвращаются к исходным.

  5. Страница собрана композитом примерно 10% случаев

    ПризнакГость видит старую страницу, а под своей учётной записью всё правильно.

    ПроверкаОткрываем страницу в окне без входа на сайт и сравниваем с обычным просмотром.

    Что делатьСбрасываем композитный кэш: готовая страница отдаётся до выполнения кода компонента.

Частые вопросы

Почему правки в файле доработки результата не применяются?

Он выполняется только при сборке данных компонента. При годном кэше сборки не происходит, и файл не вызывается: сначала сбрасывают кэш.

Где лежит правильная копия шаблона?

В каталоге шаблона сайта или в каталоге решений, в зависимости от того, где её завели. Приоритет у шаблона сайта, а файлы ядра трогать не следует вовсе.

Стоит ли выключать кэш на время разработки?

Проще уменьшить время его жизни и сбрасывать кэш после правок. Полное отключение меняет поведение сайта и прячет ошибки, которые проявятся на боевом.

Почему заголовок страницы не тот, что задан в шаблоне?

Код после подключения шаблона выполняется позже эпилога компонента и перетирает заголовок. Заголовок задают в одном месте, а не в двух.

Почему меняется вёрстка только у части страниц?

У компонента несколько шаблонов, и разные страницы вызывают разные. Имя шаблона видно в параметрах вызова компонента на странице.

Смежное

Первоисточник