1. Делаем настройки в админке
Переходим в админке на страницу настроек Композитного сайта: Настройки -> Настройки продукта -> Композитный сайт
Включаем кнопку Композит.

Устанавливаем значения полей:
Хранить кеш: можно оставить в файлах
Список доменных имен (каждое в новой строке): укажите свой домен, если настроена многосайтовость, то несколько доменов.
Маска включения: *.php;*.html;*/;* - указываем, что кэшировать будем все url, которые заканчиваются на ".php", ".html" или "/".
Маска исключения: не все страницы нужно композитить, т.к это могут быть служебные страницы или страницы с ограниченным доступом, если они попадут в кэш, то будут доступны всем; поэтому указываем страницы-исключения.

Сохранять на диск только страницы без параметров: если кэшировать страницы с параметрами, то нужно выделять большый объем памяти под файлы кэша, т.к адресов с get-параметрами может быть много, их генерируют и фильтры и сортировка, постраничная навигация и т.д. Если у вас есть несколько свободных гигов, можно поставить галочку.
Дисковая квота (мегабайт): в зависимости от проекта, можно поставить 100 или 100000 мегабайт; для среднего магазина на 3-4 тысячи товаров достаточно 5Гб. Если вы установить меньшую квоту чем требуется, то файлы композитного кэша не будут сохраняться после превышения квоты.
2. Включаем логи
Вторым шагом включим константы в /bitrix/php_interface/dbconn.php, они нам потребуются для отладки, в файле log.txt будут сохраняться записи об ошибках и успешном создании композитного кэша страницы.
Для этого переходим: Контент -> Структура сайта -> Файлы и папки -> bitrix -> php_interface .
Находим файл dbconn.php и нажимаем Редактировать как PHP
Далее устанавливаем в конце файла эти две сточки:
?
1 2 |
define( "BX_COMPOSITE_DEBUG" , true ); define( "LOG_FILENAME" , $_SERVER[ "DOCUMENT_ROOT" ]. "/log.txt" ); |
Сохраняем.
3. Настройка компонетов
Теперь самое интересное. Компоненты сайта будем делить на статические и динамические.
Статические - которые выдают одинаковый код для любого пользователя. Например, это может быть меню каталога (bitrix:menu), список разделов(catalog.section.list), список новостей(news.list) или детальная страница новости(news.detail).
Для таких компонентов, в шаблонах, после объявления пролога включаем композит:?
1 2 |
if (!defined( "B_PROLOG_INCLUDED" ) || B_PROLOG_INCLUDED!== true )die(); $ this ->setFrameMode( true ); |
В метод setFrameMode можно передать true или false, соответственно включить и отключить композит.
Динамические компоненты нужно обновлять для каждого пользователя. К таким компонентам относятся малая корзина(bitrix:sale.basket.basket.line) или форма авторизации(bitrix:system.auth.form). Если, к примеру, мы не обновим блок корзины, то он выдаст нам информацию из кэша, а зачем пользователю чужая корзина. Для шаблонов динамических компонентов код выглядит так:?
1 2 3 |
if (!defined( "B_PROLOG_INCLUDED" ) || B_PROLOG_INCLUDED!== true )die(); $ this ->setFrameMode( true ); $ this ->createFrame()->begin( '' ); |
А теперь, если мы хотим кэшировать компоненту, но не полностью а частично, например, хотим обновлять цены в списке элементов (bitrix:catalog.section)
?
1 2 3 4 5 6 7 8 9 |
<div id= "price-index" > <!--? $frame = $ this --->createFrame( 'price-index' .$arFields[ 'ID' ], false )->begin() echo $arFields[PRICES][BASE][PRINT_VALUE_VAT]; $frame->beginStub()?> <span>руб.</span> $frame->end() ?> </div> |
, тогда при загрузке сайта пользователь увидит?
1 |
<span>руб.</span> |
, а после обновления асинхронным запросом увидит то, что возвращает?
1 |
echo $arFields[PRICES][BASE][PRINT_VALUE_VAT]; |
Если нам нужно закэшировать часть кода вне компоненты, например, в шаблоне сайта, используем такой код:?
1 2 3 4 5 6 7 |
\Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID( "user-block" ); if ( !$GLOBALS[ "USER" ]->IsAuthorized() ){ <a href= "/auth/" >Авторизация</a> } else {?><br> <a href= "/personal/" >Мой профиль</a> }<br> \Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID( "user-block" , "" ); |
В большинстве случаев этого достаточно.
Также можно использовать:
?
1 2 3 4 5 6 7 8 9 10 11 |
6. Используем кэш браузера. Подгружает статику с прошлого хита (для малой корзины) $frame=$ this ->createFrame()->begin( '' ); $frame->setBrowserStorage( true ); 7. Использование анимации для баннера (плавное появление контента) <div id= "top_banner" > <!--? $frame = $ this --->createFrame( 'top_banner' )->begin( '' ); $frame->setAnimation( true ); ?> </div> |
4. Отладка
Когда вы установите для всех шаблонов компонентов настройки для композита, можно проверить страницу. Для этого откройте ее в браузере и посмотрите под не авторизованным пользователем: в подвале должен появиться баннер "Быстро с 1С Битрикс".
Если такой баннер не появился, то смотрим файл логов, он находится в корне сайта и называется log.txt.
В нем будут указаны компоненты, для которых не настроено композитное кэширование.
Если все-таки у вас возникнут проблемы с настройкой Композитного сайта - обращайтесь, помогу.