Вывод товаров зная их ID

Данный форум не является официальным и не преследует ни каких целей. Владелец сайта оставляет за собой право удалять, перемещать и закрывать темы и посты по своему усмотрению. Рекламные темы и сообщения только с согласия администратора.

Вход Регистрация
Быстрый вход / регистрация, через социальную сеть
Регистрируясь на форуме, Вы безоговорочно принимаете условия политики конфеденциальности и обработки персональных данных
RSS
Вывод товаров зная их ID
 
Здравствуйте! Спасибо за Ваши записки и уроки , помогают разбираться в этой "нелегкой" цмс

Недавно начал работать с битриксом, много простых вещей приходится делать с нервами))

Подскажите пожалуйста Михаил, задача такая:

Вывести сопутствующие товары из категорий которые в ручную указали для раздела(или их родителей) в котором находится этот товар.
Пример:
http://joxi.ru/Y2LvYMoi9y9jgr

Все категории получаю так, прохожу по всем родителям(по цепочке) товара и получаю их поле UF_RELATED ну и складываю все в массив $RELATED
Код
$RELATED = array();
    $nav = CIBlockSection::GetNavChain(false, $arResult["IBLOCK_SECTION_ID"], array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM"));
    while($arItem = $nav->Fetch()){
        $dbSectionR = CIBlockSection::GetList(array(), array("ID" => $arItem["ID"], "IBLOCK_ID" => $arParams["IBLOCK_ID"]), false ,array("ID", "IBLOCK_ID", "NAME", "UF_RELATED"));
        if($arSectionR = $dbSectionR->GetNext()){ 
            if(!empty($arSectionR['UF_RELATED'])){
                foreach($arSectionR['UF_RELATED'] as $k => $v){
                    $RELATED[] = $v;
                }
            }
        }
    }

http://joxi.ru/DmBvLyjiw9w7lm

Чтож категории есть. Теперь стоит задача выводить по 2-4 товара рандомно с каждой категории.

Т.к. я не понял как в виде массива передать ИДшники разделов для bitrix:catalog.section чтобы он сам вывел, пошел в документацию читать про CIBlockElement::GetList.
написал вот такой код
Код
foreach($RELATED as $k => $v){
        $arOrderR = Array("RAND " => "ASC");
        $arSelectR = Array("ID", "NAME");
        $arFilterR = Array("IBLOCK_ID"=> $arParams["IBLOCK_ID"], "SECTION_ID"=> $v , "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y" );
        $res = CIBlockElement::GetList($arOrderR, $arFilterR, false, array("nTopCount"=>3), $arSelectR);
        
        while($ob = $res->GetNextElement())
        {
            $arFieldsR = $ob->GetFields();
            print_r($arFieldsR);
        }
    }

RAND  - что-то не работает, т.е. после перезагрузки страницы он так же показывает товары которые показывал до этого.
http://joxi.ru/BA0V0jltJGJ5Em
Подскажите почему так?

Нельзя ли как то передавать id разделов или id товаров на крайний случай чтобы передавать их в модуль bitrix:catalog.section ?
Может есть какое то более грамотное решение задачи?
 
Если полностью отключить кеширование и композитный сайт- все равно не хочет выводить рандомные товары?
И у Вас: в примере кода пробел лишний.

Вообще, конечно, если я правильно понял задачу- можно сделать все проще и понятнее.
Но буквами много текста, и не до конца уверен, что понял правильно.
 
Цитата
Михаил Базаров написал:
Если полностью отключить кеширование и композитный сайт- все равно не хочет выводить рандомные товары?
И у Вас: в примере кода пробел лишний.


С пробелом это я конечно .... слов нет. Видать пора пойти покушать)) Заработал рандомный показ. Спасибо большое :)

Структура
- р1
---а1
- р2
--- о1
------п1
------п2
--- о2
--- о3
- р3
...
Менеджер в ручную проставляет допустим для п1 брать товары из а1 и р3.
у них ИД условно а1 = 1020 и р3 = 1234
Этот код у меня вроде норм отрабатывает, айдишники получаю из UF_RELATED  они у меня собираются в массив

вот.

Теперь вывести нужно рандомно по три товара с каждого раздела(поиск и по подразделом тоже если он как р3 на первом уровне)
т.е.
из категории а1 взять 3 случайных товара
и из р3(его подразделов) взять 3и случайных товара

Цитата
Вообще, конечно, если я правильно понял задачу- можно сделать все проще и понятнее.
Но буквами много текста, и не до конца уверен, что понял правильно.
Можете хотя бы основные моменты подсказать, не прошу готовый код. Т.е. какой компонент использовать и как куда передавать полученные ИД категорий.
Так сказать мыслю, основную идею.
 
Опять таки, если правильно понял задачу:
- В element.php получить ID текущей секции
- Если мы в последней, или есть потомки получить и их ID (или где еще встречается этот элемент)
- Вывести в element.php топ элементов с рандомной сортировкой и фильтром по ID раздела (и потомков)

Но, я прям сомневаюсь, что все правильно понял
 
Цитата
Михаил Базаров написал:
Опять таки, если правильно понял задачу:
- В element.php получить ID текущей секции
- Если мы в последней, или есть потомки получить и их ID (или где еще встречается этот элемент)
- Вывести в element.php топ элементов с рандомной сортировкой и фильтром по ID раздела (и потомков)

Но, я прям сомневаюсь, что все правильно понял
Спасибо за наводку! Помогло то что можно в фильтр передать для SECTION_ID массив. До этого напрямую пытался в параметре передать, а не в фильтре.

в итоге сделал так:

Код получения ID сопутствующих разделов (Находимся в товаре и идем выше по иэрархии и вытакскиваем Доп поле UF_RELATED)
Код
$RELATED = array();
    $nav = CIBlockSection::GetNavChain(false, $arResult["IBLOCK_SECTION_ID"], array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM"));
    while($arItem = $nav->Fetch()){
        $dbSectionR = CIBlockSection::GetList(array(), array("ID" => $arItem["ID"], "IBLOCK_ID" => $arParams["IBLOCK_ID"]), false ,array("ID", "IBLOCK_ID", "NAME", "UF_RELATED"));
        if($arSectionR = $dbSectionR->GetNext()){ 
            if(!empty($arSectionR['UF_RELATED'])){
                foreach($arSectionR['UF_RELATED'] as $k => $v){
                    $RELATED[] = $v; 
                }
            }
        }
    }


Далее найденные категории надо передать в компонент bitrix:catalog.section
Приведу основные строчки кода
Код
if(is_array($RELATED) && !empty($RELATED)){
//В глобальные регистрируем свой фильтр и передаем массив с ID категорий
        $GLOBALS['RELATEDFilter'] = array("SECTION_ID" => $RELATED); 
       
        $APPLICATION->IncludeComponent(
            "bitrix:catalog.section",
            "slider_products",
            Array(
                "ELEMENT_SORT_FIELD" => "RAND",
                "ELEMENT_SORT_ORDER" => "asc",
                "FILTER_NAME" => "RELATEDFilter",
                
                //Тут ограничиваем количество товаров (не обязательно)
                "PAGE_ELEMENT_COUNT" => count($RELATED)*4,

                ......
            )
        );
    }
Читают тему (гостей: 1)