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

Вывод по свойству.

00 голосов
5
Здравствуйте.

Есть ифоблок. с несколькими уровнями вложенности.
Код
ibfoblok
  podrazd1_1
    podrazd1_2
     element1
    podrazd1_3
     element2
  podrazd2_1
    podrazd2_2
     element1

У элементов есть свойство, да(1) - нет(0), на определенной странице требуется выводить их по свойству да (с этим проблем нет GetIBlockElementList по фильтру), но вывести надо в таблицу такого вида:
Код
----------------podrazd1_1---------------
---podrazd1_2---    -    ---podrazd1_3---
     element                   element
     element                   element
Может появиться podrazd1_4
----------------podrazd1_1---------------------------------
---podrazd1_2---    -    ---podrazd1_3---  -  ---podrazd1_4---
     element                   element            element
     element                   element            element

Подскажите возможно ли такое сделать, и какие функции использовать?
спросил 04 Ноя, 13 от CAJLO (120 баллов)

5 Ответы

00 голосов
Цитата
Артем пишет:
У элементов есть свойство, да(1) - нет(0), на определенной странице требуется выводить их по свойству да (с этим проблем нетGetIBlockElementList по фильтру), но вывести надо в таблицу такого вида: Код


Так проблема оформить в таблицу?
Тогда можно поставить условие, а можно при поиощи GetIBlockElementList сделать 2 массива, это если вы пишите компонент,
1) 1 массив будет содержать выборку по условию(да)
2) 2 массив по условию (нет)

а потом как обычно foreach по этим массивам и все,
но я бы сначала попробовал расставить условия в полном массиве элементов...
ответил 11 Дек, 13 от Lekar (2,220 баллов)
00 голосов
До таблицы дело пока не дошло, в данный момент застрял на:
Код
<?
if(CModule::IncludeModule("iblock"))
{
   $items = GetIBlockElementList("46", false, Array("SORT"=>"ASC"), false, Array("PROPERTY_SPEC"=>"2"));
   while($arItem = $items->GetNext())
   {
      echo $arItem["NAME"]."<br>";
   }
}
?>

Список элементов нужных я получил, но они все в разных подразделах, теперь нужно получить эти подразделы, для формирования таблицы, но их я как не крутил, так и не получил.
ответил 25 Март, 14 от CAJLO (120 баллов)
00 голосов
Я думаю нужно начать с выборки разделов... а потом выбирать элеиенты по SECTION_ID т.е примерно такой код


Код
<?php
if(CModule::IncludeModule("iblock"))
{
  $arFilter = Array('IBLOCK_ID'=>$IBLOCK_ID, 'GLOBAL_ACTIVE'=>'Y');
  $db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true);
   while($ar_result = $db_list->GetNext())
  {
      $arFilter = Array('IBLOCK_ID'=> 46, 'SECTION_ID =>  $ar_result['ID']', 'GLOBAL_ACTIVE'=>'Y'); 
      $items = GetIBlockElementList( Array("SORT"=>"ASC"),$arFilter ,false, Array("PROPERTY_SPEC"=>"2"));
   while($arItem = $items->GetNext())
   {
      echo $arItem["NAME"]."<br>";
   }
  
  }
 
}
 
?>

ответил 16 Июль, 14 от Lekar (2,220 баллов)
00 голосов
Спасибо. Истина где то рядом))

Эффект почти достигнут, результат вывода:
Код
<?
if(CModule::IncludeModule("iblock"))
{
  $arFilter = Array("IBLOCK_ID"=>"46", "GLOBAL_ACTIVE"=>"Y", "PROPERTY"=>Array("SPEC"=>"2"));
  $db_list = CIBlockSection::GetList(Array("sort"=>"ASC"), $arFilter, true);
   while($ar_result = $db_list->GetNext())
   {
      echo $ar_result['ID'].' '.$ar_result['NAME'].': '.$ar_result['ELEMENT_CNT'].'<br>';
      
      $items = GetIBlockElementList("46", $ar_result['ID'], Array("SORT"=>"ASC"), false, Array("PROPERTY_SPEC"=>"2"));
      while($arItem = $items->GetNext())
      {
        echo $arItem["NAME"]."<br>";
      }
    
   }

}
?> 


Код
podrazd1_1
podrazd2_1
 podrazd1_2
  element1 
 podrazd2_2
  element1 

Осталось добиться вывода верхних уровней не подряд, с логикой данного кода это не получить. smile:oops:
ответил 17 Ноя, 14 от CAJLO (120 баллов)
00 голосов
Чтот ни чего не выходит, пытался ввести доп переменную и прерывать цикл (continue), переменной задавать условие, проверять значение и выводить, но эффект тот-же, ни как не могу заставить проходить по эрархии, т.к начало идет проход по верхним уровням smile:(
ответил 13 Март, 15 от CAJLO (120 баллов)

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

0 голосов
1 ответ
спросил 13 Авг, 13 от delajla (500 баллов)
0 голосов
1 ответ
спросил 22 Фев, 18 от аноним
0 голосов
1 ответ