Создаю свой компонент,суть которого вывести карточку товаров,лежащих в определенном инфоблоке.
У товаров есть 2 свойства,первое - это список,второе - хранится в отдельном инфоблоке(тип:привязка к элементам инфоблока)
Используя этот код:
CModule::IncludeModule("iblock");
$arOrder = Array(
"SORT" => "ASC",
"PROPERTY_PRIORITY" => "ASC"
);
$arFilter = Array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"ACTIVE" => "Y",
"!PROPERTY_SRC" => false
);
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "PREVIEW_PICTURE", "DATE_CREATE", "PROPERTY_*");
$res = CIBlockElement::GetList(
$arOrder,
$arFilter,
false,
Array("nPageSize" => $arParams["NEWS_COUNT"]),
$arSelect
);
$arImageSize = Array("width" => $arParams["WIDTH"], "height" => $arParams["HEIGHT"]);
while ($result = $res->Fetch())
{
$props = CIBlockElement::GetProperty($result['IBLOCK_ID'], $result['ID'], "sort", "asc", array("PROPERTY_BRAND"));
while ($arProps = $props->Fetch())
{
$result['PROPS'][$arProps['CODE']] = $arProps;
}
if ($result["PREVIEW_PICTURE"])
{
$arFileTmp = CFile::ResizeImageGet(
$result["PREVIEW_PICTURE"],
$arImageSize,
BX_RESIZE_IMAGE_PROPORTIONAL,
false
);
$arSize = getimagesize($_SERVER["DOCUMENT_ROOT"] . $arFileTmp["src"]);
$result["PREVIEW_IMG"] = Array(
"SRC" => $arFileTmp["src"],
"WIDTH" => intval($arSize[0]),
"HEIGHT" => intval($arSize[1])
);
}
$arResult["ITEMS"][] = $result;
}
Получаю все,что мне нужно,кроме названия второго свойства.
Я понимаю,что,во-первых,цикл в цикле это нехорошо,а,во-вторых нужно по ID выводить Имя свойства.
Проштудировал документацию и нашел такой вариант:
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*");//IBLOCK_ID и ID обязательно должны быть указаны, см. описание arSelectFields выше$arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);
while($ob = $res->GetNextElement()){
$arFields = $ob->GetFields();
print_r($arFields);
$arProps = $ob->GetProperties();
print_r($arProps);
}
Но я не совсем понимаю,как связать его с моим результирующим(то есть основным кодом).
Мне нужно отдельно вытаскивать элементы(свойства) из другого инфоблока и впихивать в $arResult?
У товаров есть 2 свойства,первое - это список,второе - хранится в отдельном инфоблоке(тип:привязка к элементам инфоблока)
Используя этот код:
CModule::IncludeModule("iblock");
$arOrder = Array(
"SORT" => "ASC",
"PROPERTY_PRIORITY" => "ASC"
);
$arFilter = Array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"ACTIVE" => "Y",
"!PROPERTY_SRC" => false
);
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "PREVIEW_PICTURE", "DATE_CREATE", "PROPERTY_*");
$res = CIBlockElement::GetList(
$arOrder,
$arFilter,
false,
Array("nPageSize" => $arParams["NEWS_COUNT"]),
$arSelect
);
$arImageSize = Array("width" => $arParams["WIDTH"], "height" => $arParams["HEIGHT"]);
while ($result = $res->Fetch())
{
$props = CIBlockElement::GetProperty($result['IBLOCK_ID'], $result['ID'], "sort", "asc", array("PROPERTY_BRAND"));
while ($arProps = $props->Fetch())
{
$result['PROPS'][$arProps['CODE']] = $arProps;
}
if ($result["PREVIEW_PICTURE"])
{
$arFileTmp = CFile::ResizeImageGet(
$result["PREVIEW_PICTURE"],
$arImageSize,
BX_RESIZE_IMAGE_PROPORTIONAL,
false
);
$arSize = getimagesize($_SERVER["DOCUMENT_ROOT"] . $arFileTmp["src"]);
$result["PREVIEW_IMG"] = Array(
"SRC" => $arFileTmp["src"],
"WIDTH" => intval($arSize[0]),
"HEIGHT" => intval($arSize[1])
);
}
$arResult["ITEMS"][] = $result;
}
Получаю все,что мне нужно,кроме названия второго свойства.
Я понимаю,что,во-первых,цикл в цикле это нехорошо,а,во-вторых нужно по ID выводить Имя свойства.
Проштудировал документацию и нашел такой вариант:
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*");//IBLOCK_ID и ID обязательно должны быть указаны, см. описание arSelectFields выше$arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);
while($ob = $res->GetNextElement()){
$arFields = $ob->GetFields();
print_r($arFields);
$arProps = $ob->GetProperties();
print_r($arProps);
}
Но я не совсем понимаю,как связать его с моим результирующим(то есть основным кодом).
Мне нужно отдельно вытаскивать элементы(свойства) из другого инфоблока и впихивать в $arResult?