Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Список не выбранных объектов

00 голосов
3
У меня на сайте два инфоблока, у первого есть свойство привязка к элементам, как на сайте вывести элементы второго инфоблока, которые не выбраны в первом?
Я так понимаю что это можно сделать через CIBlockElement::GetList, но у меня получается вы вести только те что выбраны, а как сделать обратный фильтр?
спросил 05 Фев, 14 от Maximus1 (380 баллов)

3 Ответы

00 голосов
Перед названием фильтруемого поля можно указать тип проверки фильтра:
  • "!" - не равно
  • "<" - меньше
  • "<=" - меньше либо равно
  • ">" - больше
  • ">=" - больше либо равно
  • "><" - между
  • и т.д.
ответил 16 Июнь, 14 от NitroGeN (2,840 баллов)
00 голосов
Ну это здорово, вот только если сделать так:



Код
<? 
CModule::IncludeModule("iblock"); 
CModule::IncludeModule("sale"); 
CModule::IncludeModule("catalog"); 
$arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM", "CREATED_BY", "PROPERTY_*"); 
$arFilter = Array("IBLOCK_ID"=>6, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y"); 
$res = CIBlockElement::GetList(array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);  
while($ob = $res->GetNextElement()) 
{ 
    $arFields = $ob->GetFields(); 
    $arProps = $ob->GetProperties(); 
    $arSelectCase = Array("ID", "NAME", "DATE_ACTIVE_FROM", "CREATED_BY", "PROPERTY_*"); 
    $arFilterCase = Array("IBLOCK_ID"=>9, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "!=ID"=>$arProps["CASES"]["VALUE"]); 
    $resCase = CIBlockElement::GetList(array(), $arFilterCase, false, Array("nPageSize"=>50), $arSelectCase); 
    while($ob = $resCase->GetNextElement()) 
    { 
        $arFieldsCase = $ob->GetFields(); 
        $arPropsCase = $ob->GetProperties(); 
        echo $arFields["NAME"];?> 
        <?=$arFieldsCase["ID"]?><?=$arFieldsCase["NAME"]?><br/> 
    <?}  
}?>


То выведет не выбранные элементы в каждом элементе первого инфоблока, а мне нужно вывести только те что нигде не выбраны.
ответил 15 Окт, 14 от Maximus1 (380 баллов)
00 голосов
вообщем разобрался, немного изменил код

Код
<? 
CModule::IncludeModule("iblock"); 
CModule::IncludeModule("sale"); 
CModule::IncludeModule("catalog"); 
$arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM", "CREATED_BY", "PROPERTY_*"); 
$arFilter = Array("IBLOCK_ID"=>6, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y"); 
$i=0; 
$res = CIBlockElement::GetList(array(), $arFilter, false, Array("nPageSize"=>50), $arSelect); 
while($ob = $res->GetNextElement()) 
{ 
    $arFields = $ob->GetFields(); 
    $arProps = $ob->GetProperties(); 
    foreach ($arProps["CASES"]["VALUE"] as $case): 
        $CASES[$i]=$case; 
        $i++; 
    endforeach; 
}?> 
<? echo "<pre>"; print_r(array_unique($CASES)); echo "</pre>";?> 
<? 
$CASES=array_unique($CASES); 
$arSelectCase = Array("ID", "NAME", "DATE_ACTIVE_FROM", "CREATED_BY", "PROPERTY_*"); 
$arFilterCase = Array("IBLOCK_ID"=>9, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "!=ID"=>$CASES); 
$resCase = CIBlockElement::GetList(array(), $arFilterCase, false, Array("nPageSize"=>50), $arSelectCase); 
while($ob = $resCase->GetNextElement())  
{ 
    $arFieldsCase = $ob->GetFields(); 
    $arPropsCase = $ob->GetProperties();?> 
    <?=$arFieldsCase["ID"]?><?=$arFieldsCase["NAME"]?><br/>  
<?}?>
ответил 15 Фев, 15 от Maximus1 (380 баллов)

Похожие вопросы

0 голосов
2 ответов
0 голосов
6 ответов
спросил 07 Сен, 13 от Fierce88 (440 баллов)
0 голосов
1 ответ