Это старая версия документа!
Не работает кнопка «Оставить отзыв», слетают стили, отзывы не обновляются
Описание проблемы
При установке модуля «Универсальные отзывы, комментарии и рейтинги» на некоторых проектах наблюдаются следующие ошибки:
- Слетают стили модуля при обновлении страницы
- Кнопка «Оставить отзыв» не работает
- Отзывы не отображаются сразу после добавления
Причина
Чаще всего проблема возникает из-за подключения компонентов модуля в кешируемой области шаблона другого компонента.
Для оформления и реализации front-end логики компонента, в его шаблоне доступны не обязательные файлы
- style.css, который определяет стили, необходимые данному шаблону
- script.js, который определяет и подключает скрипты, необходимые данному шаблону.
Эти файлы подключаются при исполнении кода компонента. Однако, если вызов одного компонента находится внутри другого, при отработке кеша вложенный компонент не вызывается, а значит его скрипты и стили не подключаются на странице.
Для компонентов нашего модуля это приводит к следующему:
- Не подключаются скрипты и стили
- Отзывы и комментарии кешируются
- Новые отзывы не отображаются без сброса кеша
Решение
- Вариант 1. (Не рекомендуется) Отключить кеш родительского компонента. Такой подход решает проблему, но ухудшает производительность страницы
- Вариант 2. Вынести вызов компонента из кешируемой области шаблона в файл component_epilog.php родительского компонента. Этот вариант самый простой, но может не подойти в конкретном случае из-за несоответствия верстке.
- Вариант 3. Буфферизация вывода шаблона родительского компонента с последующей заменой контента. Подробнее gdecider.github.io/articles-bx-inner-component.html
- Вариант 4. Подходит только для комплексных компонентов. Вынести вызов компонента отзывов в из конкретного компонента в шаблон страницы. Например, для товара в каталоге нужно вынести вызов компонента комментариев из шаблона компонента catalog.element в файл в element.php шаблона комплексного компонента catalog.
- Вариант 5. В вызов компонента комментариев добавить четвертым параметром переменную $component. Пример:
$APPLICATION->IncludeComponent('chililab:page.reviews.list', '', [], $component);
Итог
Для корректной работы компонента нужно учитывать особенности кеширования Битрикс
