bitrix;catalog не кешируеться, ваши стили не подгружаються по другой причине.
Описанного бага очень давно нету.
Возможно вы подключили файл стилей в коде шаблона меню, тогда стили не будут подключаться при выводе из кеша. Ваши стили должны быть в style.css рядом с template.php, тогда они подхватяться автоматом. Или должны быть подключены в component_epilog.php, если имя и расположение файла вас не устраивает.
bitrix:catalog кешируется потому что, в настройках указано Кэш+Авто
Более того стили и скрипты подтягиваются автоматом методом $APPLICATION->showHead()
Причем если не кешировать этод метод собирает все стили компонентов в один файл [если имеются .min.* то их в противном случае обычные неминифицированные].
Если включить кеширование, то о стилях и скриптах система забывает.
В bitrix:catalog нету кеширования как такового, настройки кеша компонента передаються дочерним компонентам, например в bitrix:catalog.section, но в самом bitrix:catalog не используються. Там просто нету кода который использовал бы кеш. Это просто контролер/маршрутизатор.
$APPLICATION->showHead() используеться в общем шаблоне сайта в файле header.php. Этот код в 99.9% случаев не нужно трогать. Да, этот метод должен собирать и выводить css и js файлы в head. Так и задумано.
script.js и style.css в папках шаблонов компонентов подключаються автоматом не зависемо от кеша. Если у вас компонент вызываеться из кешируемого шаблона другого компонента, то нужно также передавать обьект родительского компонента в четвертый аргумент метода IncludeComponent.
Я захожу на страницу продукта, включаю режим правки и захожу в настройки компонента.
Наверху написано bitrix:catalog в настройках кэширования Авто+Кэш. Если сменить на некэшировать все стили и скрипты всех компонентов будут подгружаться, если же включить кэширование то стили со скриптами перестают подтягиваться
Далее: из-того что помню сейчас [рабочий комп находится не под рукой сейчас] сам компонент находится в /home/bitrix/www/bitrix/templates/название_шаблона/components/bitrix/catalog/template.php [точно все могу написать позже вечером]
В template.php вызов IncludeComponent без 4-ого параметра. Однако пытался явно передавать 4-ым параметром переменную $Component, но и это не помогает.
Все что Вы написали я знаю [за исключением component_epilog] но это не работает, тупо showHead перестает возвращать стили и скрипты
в шаблоне сайта есть 2 файла header.php и футер, которые подгружают разные компоненты [посредством IncludeComponent, 4 параметр у них везде false]. Все их стили и скрипты загружаются с кэшем и без.
Захожу на страницу конкретного продукта. В моем случае это компонент catalog.element [header, catalog.element, footer], который подгружает остальные компоненты [посредством IncludeComponent, 4 параметр у них у всех $component]. В начале вот такая конструкция $this->setFrameMode(true); $frame = $this->createFrame()->begin(); в конце <?$frame->end()?> Ни один скрипт и и стиль не грузиться под кэшем из этого файла template.php. [напомню: котоый вызывает кучу других компонентов]
Для тех кто в битриксе разбирается это должно быть проще простого. Может прав не хватает где-то или как? Что за глупость кэшировать html без стилей и скриптов? Подскажите пожалуйста, а ту меня тошнить от этого начинает
вот еще один товарищь пишет: Популярная ошибка, в шаблоне компонента вызываются отложенные функции: $APPLICATION->SetTitle(), $APPLICATION->AddChainItem() и т.д. В этом случае они работают только при выключенном кешировании.
Решение проблемы было, отключение модлуля CDN + добавление переменной $component в качестве четвертого параметра.
Однако, как выяснилось позже не все дочерние компоненты подгружаются
Есть несколько вопросов:
1 . Есть компонент catalog.element, который вызывает некоторое множество субкомпонентов. При этом стили и скрипты одних компонентов грузятстся, других нет. В чем может быть дело? 2. Когда сессия админки открыта, стили берутся из кеша с префиксом default_..., если заходить на сайт как гость, то стили берутся из page_...При чем в page не все стили попадают. Чем отличается template_, page_, default_? Как формируется мд5 хеш всех стилей? Что за метка после знака вопроса?
Тоже искал решение что могу сказать, не нужно строить костылей что в итоге: переменная $component существует только в шаблоне компонента в template.php по этому если вы вызываете компонент в шаблоне ставите там 4-й параметра $component в место false и все будет работать, но (мой случай) если вы на примере хлебных крошек вызываете их через API в файле component.php то там вместо 4-го параметра нужно ставить не $component а $this, мне это помогло, всем удачи.
Некропост, но может кому-то пригодится решение отсюда: аналогичную проблему решил, создав файл component_epilog.php и прописав в нём: $APPLICATION->SetAdditionalCSS('/path/to/custom_style.css');