|
Типичная задача для модуля «Включамый код»:
- компонент catalog,
- в нём на странице element.php вызывается простой компонент catalog.element
- требуется на детальной странице товара вывести список отзывов (модуль Отзывы о товаре)
Для использования включаемого кода нужно выполнить два действия:
- создать включаемый файл,
- подключить файл.
Включаемые файлы создаются в папке /bitrix/php_interface/include/askaron.include/ или /local/php_interface/include/askaron.include/
Создаем в папке /bitrix/php_interface/include/askaron.include/ файл reviews.php
Примерное содержимое:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?$APPLICATION->IncludeComponent(
"askaron:askaron.reviews.for.element",
".default",
array(
"ELEMENT_ID" => $arParams["ELEMENT_ID"],
"CACHE_TYPE" => "A",
"CACHE_TIME" => "86400",
"PAGE_ELEMENT_COUNT" => 10,
"AJAX_MODE" => "Y",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"AJAX_OPTION_HISTORY" => "N",
"PAGER_TEMPLATE" => "",
"DISPLAY_BOTTOM_PAGER" => "Y",
"COMPONENT_TEMPLATE" => ".default",
"NEW_REVIEW_FORM" => "Y",
"AJAX_OPTION_ADDITIONAL" => "undefined"
),
false
);?>
Аналогичный включаемый файл можно легко создать из готового примера включаемого файла:
Теперь надо вызвать включаемый файл и передать в него параметр ELEMENT_ID.
Редактируем файл template.php в компоненте catalog.element:
Пишем где-нибудь:
<?CAskaronInclude::IncludeFile(
"reviews.php",
array(
"ELEMENT_ID" => $arResult["ID"],
)
);?>
Ура! На странице товара появляются комментарии.
Есть одна проблема. В компонентах, где включен режим AJAX ("AJAX_MODE" => "Y") могут быть глюки.
Дело в том, что «Включаемый код» срабатывает на событиях в конце выполнения страницы. А режим AJAX использует отложенные функции.
Решением подобных проблем является вызов специальных функций до и после компонента "Детальная страница товара".
<?
CAskaronInclude::StartBuffer();
?>
<?$ElementID = $APPLICATION->IncludeComponent(
"bitrix:catalog.element",
"",
array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
...
),
$component
);?>
<?
CAskaronInclude::PrintBuffer();
?>
Функция PrintBuffer выведет товар детально и вызовет в нужных местах Включаемый код.
Список отзывов будет работать в режиме AJAX.
Замечание:
Методы
CAskaronInclude::StartBuffer();
CAskaronInclude::PrintBuffer();
нам нужны на тот случай, если мы хотим, чтобы компонент оформления отзыва и список отзывов работали в режиме AJAX в закешированном компоненте,
"AJAX_MODE" => "Y",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"AJAX_OPTION_HISTORY" => "N",
а больше нигде не нужны.
Буферизация может неправильно себя вести случае, если в компоненте где-нибудь произойдет die().
Вы должны сделать так, чтобы эти методы не вызывались в случае, если работают аякс-скрипты в компоненте. Например CAskaronInclude::StartBuffer(); может не дружить с добавлением в корзину.
Пример, если окно "Товар добавлен в корзину" не открывается:
if ( $_REQUEST["action"] !== "ADD2BASKET" )
{
CAskaronInclude::StartBuffer();
}
$elementId = $APPLICATION->IncludeComponent(
'bitrix:catalog.element',
'',
$componentElementParams,
$component
);
if ( $_REQUEST["action"] !== "ADD2BASKET" )
{
CAskaronInclude::PrintBuffer();
}
Размещение после компонента Элемент детально |
Описание курса
| Примеры API
|