Как для разных элементов одного инфоблока использовать разные шаблоны детального описания?

Для задачи использования разных шаблонов детального описания для разных элементов одного инфоблока в CMS 1C-Bitrix есть несколько подходов.

  1. Использование встроенных функций 1C-Bitrix:
  • Для начала необходимо создать шаблон детального описания элемента инфоблока.
  • Затем на странице списка элементов инфоблока (например, компонент bitrix:news.list) добавьте параметр "DETAIL_URL", указав шаблон ссылки на детальную страницу элемента, например:
     $APPLICATION->IncludeComponent(
         "bitrix:news.list",
         "...",
         array(
             "...",
             "DETAIL_URL" => "/news/#ELEMENT_ID#/",
             "...",
         )
     );
  • После этого при создании элемента в инфоблоке в поле "URL детальной страницы" укажите ссылку на конкретный шаблон, например, "/news/my-custom-template/".
  • Создайте файл шаблона my-custom-template.php в папке вашего шаблона сайта и задайте желаемую структуру и стили для него.
     // /local/templates/my-template/news/my-custom-template.php
     <?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); ?>

     <div class="my-custom-template">
         <!-- Ваш код HTML и логика шаблона -->
     </div>
  • При открытии детальной страницы элемента с указанной ссылкой будет использоваться файл шаблона my-custom-template.php.
  1. Использование пользовательских свойств инфоблока:
  • Создайте пользовательское свойство для инфоблока типа "Ссылка на страницу" (IBLOCKELEMENTPROPVALUE), например, с кодом DETAILTEMPLATE.
  • В поле "Значение по умолчанию" укажите путь к шаблону детального описания, который нужно использовать для данного элемента инфоблока.
  • При создании или редактировании элемента инфоблока в этом свойстве можно выбрать нужный шаблон, указав соответствующее значение.
  • В файле шаблона списка элементов инфоблока (например, компонент bitrix:news.list) добавьте код, который будет проверять значение свойства DETAIL_TEMPLATE для каждого элемента и использовать соответствующий шаблон:
     $APPLICATION->IncludeComponent(
         "bitrix:news.list",
         "...",
         array(
             "...",
             "PROPERTY_CODE" => array("DETAIL_TEMPLATE"),
             "DETAIL_TEMPLATE_PROPERTY" => "DETAIL_TEMPLATE",
             "...",
         )
     );
  • При открытии детальной страницы элемента будет использоваться шаблон, указанный в свойстве DETAIL_TEMPLATE.
  1. Использование модификации ядра 1C-Bitrix:
  • Для продвинутого способа изменения шаблона детального описания для каждого элемента инфоблока можно изменить код ядра системы.
  • Откройте файл /bitrix/modules/iblock/classes/general/element.php и найдите функцию GetByID.
  • Внутри функции найдите строку $result = $iblockElementObject->GetNext(); и добавьте перед ней следующий код:
     $result["DETAIL_PAGE_TEMPLATE"] = "/news/my-custom-template/";
  • Замените /news/my-custom-template/ на ссылку на нужный вам шаблон детального описания.
  • Сохраните изменения в файле.
  • После этого при создании элемента в инфоблоке укажите ссылку на детальную страницу элемента, которая будет соответствовать нужному шаблону.

Каждый из этих подходов имеет свои преимущества и ограничения, поэтому выбор конкретного способа зависит от требований и возможностей вашего проекта.