Предварительно включите композитный сайт в настройках сайта
1) в dbconn.php в конец файла дописать
define("BX_COMPOSITE_DEBUG", true);
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt");
Теперь в режиме инкогнито запускаем сайт (начните с главной страницы). Обновляем страницу, и идем смотреть в наш log.txt
в файле вот это 0-0
Host: bxd24.itracker.ru
Date: 2014-05-21 16:55:57
Module: composite
Template: /bitrix/templates/books/components/bitrix/menu/horizontal_multilevel/template.php
Request URI: /
Script: /index.php
CBitrixComponentTemplate::__IncludePHPTemplate < CBitrixComponentTemplate::IncludeTemplate < CBitrixComponent::showComponentTemplate < CBitrixComponent::includeComponentTemplate < include
/srv/www/bx-dev/bxd24/public_html/bitrix/modules/main/classes/general/component_template.php:584
/srv/www/bx-dev/bxd24/public_html/bitrix/modules/main/classes/general/component.php:615
/srv/www/bx-dev/bxd24/public_html/bitrix/modules/main/classes/general/component.php:564
/srv/www/bx-dev/bxd24/public_html/bitrix/components/bitrix/menu/component.php:373
/srv/www/bx-dev/bxd24/public_html/bitrix/modules/main/classes/general/component.php:480
----------
Этот текст нам говорит: «Уважаемый, вот этот шаблон
Template: /bitrix/templates/books/components/bitrix/menu/horizontal_multilevel/template.php
против композитного сайта…».
Тут два варианта, либо этому шаблону говорим, что он будет отдаваться статикой, либо динамикой.
Для отдачи статикой
$this->setFrameMode(true);
// если передать $this->setFrameMode(false);, то шаблон
// будет вечно против композитного сайта
если весь компонент нужно отдать динамикой:
$this->setFrameMode(true);
$this->createFrame()->begin('Загрузка');
или так
$frame = $this->createFrame("COMPOSIT_AUTH", false)->begin("Загрузка...");
$frame->end();
или так
$frame = $this->createFrame()->begin();
// статический и динамический контент
$frame->end();
можно сделать динамическую область и статическую область
<span id="sale-basket-basket-line-container">
<?$frame = $this->createFrame("sale-basket-basket-line-container", false)->begin(); ?>
<div>// динамическая область</div>
<?$frame->beginStub();?>
<div>// статическая область</div>
<?$frame->end();?>
</span>
Если нужно сделать динамическую область в шаблоне сайта
Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("test-b");
// тут может быть компонент или вывод времени...
Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("test-b", "");
\Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("ololo");
$APPLICATION->ShowViewContent('ololo');
\Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("ololo", "", "ID_OLOLO");
<div id="ID_OLOLO"></div>
Самостоятельно вставить данные дин. области можно на вот этих событиях:
событие происходит перед началом цикла вставки дин. блоков
BX.addCustomEvent("onFrameDataReceivedBefore", function(json) {} );
событие происходит перед вставкой каждого блока. Если для конкретного блока в шаблоне компонента было указано $frame->setAutoUpdate(false), то вставка динамического блока не происходит
BX.addCustomEvent("onBeforeDynamicBlockUpdate", function( block, fromCache) {});
событие происходит после цикла вставки дин. блоков
BX.addCustomEvent("onFrameDataReceived", function(json) {});
где json — это все данные, которые пришли в композитном ajax-хите
block — это данные по конкретному блоки (id, контент и другие)
fromCache — равен true, когда данные вставляют из локальной SQL-базы.
BX.addCustomEvent('onAjaxSuccess', function(){
$(".checkbox, .radio").uniform();
});
BX.ready(function(){
BX.addCustomEvent("onFrameDataReceived", function(json) {
console.log(json)
});
});
Отсюда https://dev.1c-bitrix.ru/community/blogs/Docs_and_other/course-composite-website.php
Подробней тут http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=39&INDEX=Y
Данная информация является моей шпаргалкой, писал в основном ее для себя.
Вот тут есть еще много полезного Композитный сайт: tips & tricks