Размещение внутри компонента Элемент детально с помощью модуля «Включаемый код»
104 / 177
Типичная задача для модуля «Включамый код»:

- компонент catalog,
- в нём на странице element.php вызывается простой компонент catalog.element
- требуется на детальной странице товара вывести список отзывов (модуль Отзывы о товаре)

Для использования включаемого кода нужно выполнить два действия: 
  1. создать включаемый файл,
  2. подключить файл.
Включаемые файлы создаются в папке /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 использует отложенные функции.

Решением подобных проблем является вызов специальных функций до и после компонента  "Детальная страница товара".

Редактирование element.php


<?
CAskaronInclude::StartBuffer();
?>

<?$ElementID = $APPLICATION->IncludeComponent(
  "bitrix:catalog.element",
  "",
  array(
    "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
    ...
  ),
  $component
);?>

<?
CAskaronInclude::PrintBuffer();
?>



Функция PrintBuffer выведет товар детально и вызовет в нужных местах Включаемый код. 

Список отзывов будет работать в режиме AJAX.





0  


 Размещение после компонента Элемент детально | Описание курса | Примеры API