Собственно задача простая.
Есть 2 инфоблока.
У элементов инфоблока 1 есть свойство типа привязка к элементам инфоблока 2.
В списке элементов инфоблока 2 нужно пометить элементы, к которым есть привязка.
Вроде бы всё просто, использую ctalog комплексный и в шаблоне catalog.section создал result_modifier.php в который сложил логику. Ибо дурак, попытаюсь объяснить что делал последовательно (код избыточен, ибо вытащил его из другого компонента, где нужны были проверки и слегка адаптировал:
Если тут вывести содержимое переменной $arLinkId, то увидим полный список ИД элементов инфоблока 2 на странице. ЭТО ХОРОШО! В том числе 2 элемента, к которым есть привязка из инфоблока 1.
Если на этом этапе вывести содержимое $res, то там всё ОЧЕНЬ ПЛОХО И НЕПОНЯТНО. Какая-то какашка. =)
Если тут в конце вывести $arResult["LINKED"], то обнаружится 2 вещи:
1) у массива нет ключей (хотя я думал туда передать ИД инфоблока 2, которые = свойству инфоблока 1)
2) в массиве находится только 1 элемент. Хотя их должно быть по крайней мере 2.
Очевидно, что где-то совершена не то что ошибка... ГЛУПОСТЬ...
Но честно говоря мозга не хватает победить.
Есть 2 инфоблока.
У элементов инфоблока 1 есть свойство типа привязка к элементам инфоблока 2.
В списке элементов инфоблока 2 нужно пометить элементы, к которым есть привязка.
Вроде бы всё просто, использую ctalog комплексный и в шаблоне catalog.section создал result_modifier.php в который сложил логику. Ибо дурак, попытаюсь объяснить что делал последовательно (код избыточен, ибо вытащил его из другого компонента, где нужны были проверки и слегка адаптировал:
Код |
---|
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?><? //Массив, в который мы соберем ID связанных элементов //т.е. элементов того инфоблока в котором находимся, но по которым будем фильтровать инфоблок со слайдером $arLinkId = array(); //Обойдем все элементы и соберем ID связанных элементов foreach ($arResult["ITEMS"] as $arItem) { //Получим ID связанного элемента $linkId = IntVal($arItem['ID']); //Если свойство было заполнено ЧИСЛОМ, то ID будет положительно //Поскольку это ИД, то он не может быть строкой или пустым. Проверка на >0 не нужна. //Занесем его в массив $arLinkId[$linkId] = $linkId; //Мы указываем в качестве ключа массива ID связанного элемента на случай, //если несколько элементов имеют один и тот же связанный элемент. //В этом случае массив $arLinkId не будет содержать дублей } |
Код |
---|
//Если после обхода у нас имеются ID связанных элементов (больше 0 элементов) if (count($arLinkId) > 0) { //То подключаем модуль инфоблоков (не будет лишним убедиться, что он подключен) if (CModule::IncludeModule("iblock")) { //Фильтр $arFilter = array( "IBLOCK_ID" => 1, "ACTIVE" => "Y", //Выбирем только активные элементв "PROPERTY_TOVLINK" => $arLinkId, //Указываем, что мы хотим выбрать только элементы, имеющиеся связь с нашими ); //Поля, которые хотим выбрать $arSelect = array( "PROPERTY_TOVLINK", "ID", ); //Сортируем по PROPERTY_TOVLINK по возрастанию $arSort = array( "PROPERTY_TOVLINK" => "ASC", ); //Делаем запрос $res = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect); |
Код |
---|
//Проходим по результату запроса и сохраняем массивы связанных элементов в $arResult $arResult["LINKED"] = array(); while($arLinkElement = $res->GetNext()) { $arResult["LINKED"][$arLinkElement['PROPERTY_TOVLINK']] = $arLinkElement; } } } ?> |
1) у массива нет ключей (хотя я думал туда передать ИД инфоблока 2, которые = свойству инфоблока 1)
2) в массиве находится только 1 элемент. Хотя их должно быть по крайней мере 2.
Очевидно, что где-то совершена не то что ошибка... ГЛУПОСТЬ...
Но честно говоря мозга не хватает победить.
вот такой я дурачок невезучий... =(