Expending Standart Components - uniqcle/Bitrix GitHub Wiki

Modifying result_modifier & component_epilog

Возможно расширить возможности стандартного компонента

result_modifier.php // Используется для дополнения $arResult. Кэшируется также как и шаблон.
component_epilog.php// Используется для расширения ф-ий компонента. Не кэшируется. 
.parameters.php     // Дополняет визуальные параметры компонента. 
Модификация изображений через result_modifier.php

Добавляем в .parameters шаблон компонента.

$arTemplateParameters["PICT_H"] = array(
    "NAME" => GetMessage("PICT_H"),
    "TYPE" => "STRING",
    "DEFAULT" => "50",
);

$arTemplateParameters["PICT_W"] = array(
    "NAME" => GetMessage("PICT_W"),
    "TYPE" => "STRING",
    "DEFAULT" => "50",
);

Дописываем в result_modifier.php

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

foreach($arResult["ITEMS"] as $ID => $Item){

    $file = CFile::ResizeImageGet(
        $Item[PREVIEW_PICTURE]['ID'],
        ["width"=> $arParams["PICT_W"], "height"=> $arParams["PICT_H"]],
        BX_RESIZE_IMAGE_PROPORTIONAL,
        false,
        false,
        false,
        false
    );
    $arResult['ITEMS'][$ID]['PREVIEW_PICTURE'] = $file;
}
Получение доп.данных для отображения в шаблоне через result_modifier.php

Привязываем к статье автора. В шаблоне компонента news.detail создаем result_modifier.php

$rsUser = CUser::GetByID( $arResult['PROPERTIES']['AUTHOR']['VALUE'] );
$arUser = $rsUser->Fetch();

$arResult['AUTHOR']['NAME'] = $arUser['NAME'];

Get Linked Elements

Простой вариант

В настройках инфоблока добавляем свойство, тип Привязка к элементам

В настройках компонента добавляем

PROPERTY_LINK_GOOD.NAME
PROPERTY_LINK_GOOD.PROPERTY_ARTNUMBER

Сложный вариант

  • Если поля не попадают в список доступных для получения GetList
  • Старые версии Bitrix Framework
  • Необходимость модификации данных
Модификация через result_modifier.php
$arArtNumberID = [];
// Собираем ID's необходимых привязанных свойств
// Будем использовать при фильтрации
foreach($arResult["ITEMS"] as $Item){
    $arArtNumberID[] = $Item["PROPERTIES"]["LINK_GOOD"]["VALUE"];
}

// Запрос
$arOrder = false;
$arFilter = array(
    "IBLOCK_ID" => 2,
    "ACTIVE" => "Y",
    "ID" => $arArtNumberID
);
$arGroupBy = false;
$arNavStartParams = array("nTopCount" => 50);
$arSelect = array("ID", "NAME", "PROPERTY_ARTNUMBER");

$dbResult = CIBlockElement::GetList(
    $arOrder,
    $arFilter,
    $arGroupBy,
    $arNavStartParams,
    $arSelect
);

$arResult["GOOD_ELEM"] = array();
while($arRes = $dbResult->GetNext()){
    $arResult["GOOD_ELEM"][$arRes["ID"]] = $arRes;
}
pre($arResult["GOOD_ELEM"]);
⚠️ **GitHub.com Fallback** ⚠️