Expending Standart Components - uniqcle/Bitrix GitHub Wiki
Возможно расширить возможности стандартного компонента
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'];
В настройках инфоблока добавляем свойство, тип Привязка к элементам
В настройках компонента добавляем
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"]);