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

Вопрос по CIBlockElement::GetList. Не могу достать свойство.

00 голосов
9
Вопрос по CIBlockElement::GetList. Не могу достать свойство.

Хочу достать свойства:
Код:
$arOrder = Array();
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID); // указываем из какого Инфоблока брать данные
$arSelectFields = Array("NAME", "PROPERTY_*");
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelectFields);

while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();

$arFieldsID = $arFields["PROPERTY_ID_MSSQL_VALUE"];
echo "<br>".$arFieldsID." - arFieldsID<br>"; // здесь есть
$arFieldsCWName = $arFields["NAME"];
echo $arFieldsCWName." - arFieldsCWName<br>";
// здесь есть
$arFieldsCWNameM3 = $arFields["PROPERTY_CWNameM3_VALUE"]; //
echo $arFieldsCWNameM3." - arFieldsCWNameM3";
// !!! здесь НЕ выводиться значение

}


Одно свойство выводиться другое нет :(

Т.е. свойство ID_MSSQL выводится,
А свойство CWNameM3 не выводится - почему?
спросил 24 Март, 13 от EDKA (980 баллов)

9 Ответы

00 голосов
Спасибо за совет.
Цитата
Дмитрий Яковенко пишет:
Если вы вызываете $res->GetNextElement(), то вам нужно вызывать
$ob->GetFields() и $ob->GetProperties()
Или используйте GetNext(), а в селекте укажите свойства, которые необходимо выбирать.


Переделал Код:
Код
$arOrder = Array();      // сортируем по свойству ID_MSSQL по возрастанию
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID);   // указываем из какого Инфоблока брать данные
$arSelectFields = Array("NAME", "PROPERTY_*");      // указываем что нам нужно
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelectFields);

while($ar_fields = $res->GetNext())
{

$ar_fieldsID = $ar_fields["PROPERTY_ID_MSSQL_VALUE"];   // здесь есть
   echo "<br>".$ar_fieldsID." - ar_fieldsID<br>";   
$ar_fieldsCWName = $ar_fields["NAME"];              // здесь есть
   echo $ar_fieldsCWName." - ar_fieldsCWName<br>";      
$ar_fieldsCWNameM3 = $ar_fields["PROPERTY_CWNameM3_VALUE"];    // !!!здесь НЕТ
   echo $ar_fieldsCWNameM3." - ar_fieldsCWNameM3";      
}


!ВСЕ точно так же, т.е. одно свойство отображается другое нет

Вот если бы все свойства не отображались, я бы как то понимал ситуацию, а когда одно отображается а другое нет...

Отличия в свойствах (кроме названия) то что первое (которое отображается) тип "число", второе (которое не достается) тип "строка". - м.б. это играет роль...
ответил 24 Март, 13 от EDKA (980 баллов)
00 голосов
Если вы вызываете $res->GetNextElement(), то вам нужно вызывать
$ob->GetFields() и $ob->GetProperties()
Или используйте GetNext(), а в селекте укажите свойства, которые необходимо выбирать.
ответил 24 Март, 13 от Almarea (3,760 баллов)
00 голосов
$arSelectFields = Array("ID", "IBLOCK_ID", "NAME", "PROPERTY_ID_MSSQL", "PROPERTY_CWNameM3");
не нужно выбирать все свойства, если Вам нужно только 2.
$ar_fieldsCWNameM3 = $ar_fields["PROPERTY_CWNameM3_VALUE"]; // !!!здесь НЕТ
а тут все правильно указано и есть элементы с заполненными свойствами?
ответил 06 Июнь, 13 от Almarea (3,760 баллов)
00 голосов
В последнем варианте инфоблок должен работать в режиме хранения свойств в отдельной таблице.
ответил 08 Сен, 13 от Dakost (580 баллов)
00 голосов
Цитата
Дмитрий Яковенко пишет:
$arSelectFields = Array("ID", "IBLOCK_ID", "NAME", "PROPERTY_ID_MSSQL", "PROPERTY_CWNameM3");
не нужно выбирать все свойства, если Вам нужно только 2.
$ar_fieldsCWNameM3 = $ar_fields["PROPERTY_CWNameM3_VALUE"]; // !!!здесь НЕТ
а тут все правильно указано и есть элементы с заполненными свойствами?


В том то и дело что нужно в дальнейшем ВСЕ свойства в итоге будет выбрать!

НО я все равно попробовал этот вариант - Свойства кроме первого не выводятся!!!!!!!

>>а тут все правильно указано и есть элементы с заполненными свойствами?
да конечно свойства заполнены
ответил 06 Дек, 13 от EDKA (980 баллов)
00 голосов
Цитата
Николай Рыжонин пишет:
В последнем варианте инфоблок должен работать в режиме хранения свойств в отдельной таблице.

Хм, т.е. этот вариант только для хранения "в отдельной таблице"?

Ну а тогда какой вариант сделать если хранения в "общей таблице"?
ответил 20 Март, 14 от EDKA (980 баллов)
00 голосов
Еще раз:
Нужно достать значения всех свойств. Значения свойств хранятся: в общей таблице (по умолчанию)
использовал код, который взял здесь:
http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php

В итоге Код получился:
Код
$arSelect = Array("NAME", "PROPERTY_*");
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
   while($ob = $res->GetNextElement()){
   $arFields = $ob->GetFields();  
      echo '<pre>';
      print_r($arFields);      // здесь есть
      echo '</pre>';
   $arProps = $ob->GetProperties();
      echo '<pre>';
      print_r($arProps);       // здесь ничего нет
      echo '</pre>';
} 

как видите ничего сильно не редактировал - в итоге свойства не выводятся!!!
ответил 11 Июль, 14 от EDKA (980 баллов)
00 голосов
В выборку добавьте ID
ответил 12 Ноя, 14 от Dakost (580 баллов)
00 голосов
Цитата
Николай Рыжонин пишет:
В выборку добавьте ID

Да! спасибо! все заработало!
ответил 09 Март, 15 от EDKA (980 баллов)

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

0 голосов
5 ответов
+2 голосов
6 ответов
спросил 15 Окт, 13 от Kakyshka (140 баллов)
0 голосов
4 ответов
спросил 18 Апр, 13 от Snezhka (2,240 баллов)
0 голосов
2 ответов
0 голосов
2 ответов