Доброго времени суток, снова иду на форум в поисках ответа на возникающие вопросы ...
Имеется инфоблок, за которым закреплено свойство множественного типа (само свойство типа файл, но это не так важно, проверял на других типах - эффект тот же). Изначально инфоблок был стандартным и при выборке по полю свойства
к результатам добавлял ненужные дублирующиеся элементы, после листания мануалов и поиска информации в интернете было найдено следующее:
- да не вопрос подумал я, так и сделаем. Что получилось в итоге?
код:
результат:
как можно наблюдать поле VALUE пусто, хотя для элементов не множественного типа все нормально (хотя с ними и так проблем не было).
Вопрос: что делаю не так?
Можно конечно использовать и стандартные инфоблоки, но тогда придется вводить условие фильтрации в цикле, так же нужно попробовать в стандартном инфоблоке извлечь свойства отдельно для элемента (чем сейчас и займусь), но почему не работает это - мне не понятно.
UPD:
Со стандартным блоком тоже весело.
Имея у элемента 3 значения 1ого множественного свойства и 4 значения 2ого множественного свойства получаем декартово произведения - т.е. 12 дубликатов, один из которых выглядит так:
Как видно извлекать свойства при помощи метода GetProperties() бесполезно, так как массив пуст. И что с этим делать? Пока другого выхода кроме как вводить фильтрацию по условию внутри цикла while - не вижу.
UPD2:
Про CIBlockElement::GetProperty знаю, на этом пока и работает, но хочется сделать одним запросом к базе а не двумя, и судя по документации сделать это можно, но почему значения множественных свойств при этом оказываются пустыми - не понятно.
Имеется инфоблок, за которым закреплено свойство множественного типа (само свойство типа файл, но это не так важно, проверял на других типах - эффект тот же). Изначально инфоблок был стандартным и при выборке по полю свойства
Код |
---|
$wantedSelect = Array("PROPERTY_WANTED_PHOTO", "PROPERTY_FIRSTNAME", "PROPERTY_NAME", "PROPERTY_SECONDNAME", "PROPERTY_test" "NAME", "CODE"); |
к результатам добавлял ненужные дублирующиеся элементы, после листания мануалов и поиска информации в интернете было найдено следующее:
Цитата |
---|
Примечание: если в массиве используются свойство, являющееся множественным, то для элементов, где используются несколько значений этого свойства, будет возвращено несколько записей вместо одной. Для решения этой проблемы инфоблоки нужно перевести в Режим хранения свойств в отдельных таблицах, в этом случае для свойства будет отдаваться массив значений. Либо можно не указывать свойства в параметрах выборки, а получать их значения на каждом шаге перебора выборки с помощью _CIBElement::GetProperties(). |
код:
Код |
---|
while($ob = $wantedRes->GetNextElement()): $arIBlockElement = $ob->GetFields(); $props = $ob->GetProperties(); echo "<hr><pre>"; print_r($props); echo "</pre>"; //... endwhile; |
результат:
Код |
---|
[WANTED_PHOTO] => Array ( [ID] => 9 [TIMESTAMP_X] => 2011-04-03 02:26:55 [IBLOCK_ID] => 22 [NAME] => Фотография разыскиваемого [ACTIVE] => Y [SORT] => 500 [CODE] => WANTED_PHOTO [DEFAULT_VALUE] => [PROPERTY_TYPE] => F [ROW_COUNT] => 1 [COL_COUNT] => 30 [LIST_TYPE] => L [MULTIPLE] => Y [XML_ID] => [FILE_TYPE] => jpg, gif, bmp, png, jpeg [MULTIPLE_CNT] => 1 [TMP_ID] => [LINK_IBLOCK_ID] => 0 [WITH_DESCRIPTION] => N [SEARCHABLE] => N [FILTRABLE] => N [IS_REQUIRED] => N [VERSION] => 2 [USER_TYPE] => [USER_TYPE_SETTINGS] => [VALUE] => [DESCRIPTION] => [~VALUE] => [~DESCRIPTION] => ) |
как можно наблюдать поле VALUE пусто, хотя для элементов не множественного типа все нормально (хотя с ними и так проблем не было).
Вопрос: что делаю не так?
Можно конечно использовать и стандартные инфоблоки, но тогда придется вводить условие фильтрации в цикле, так же нужно попробовать в стандартном инфоблоке извлечь свойства отдельно для элемента (чем сейчас и займусь), но почему не работает это - мне не понятно.
UPD:
Со стандартным блоком тоже весело.
Имея у элемента 3 значения 1ого множественного свойства и 4 значения 2ого множественного свойства получаем декартово произведения - т.е. 12 дубликатов, один из которых выглядит так:
Код |
---|
_CIBElement Object ( [fields] => Array ( [PROPERTY_WANTED_PHOTO_VALUE] => 52 [~PROPERTY_WANTED_PHOTO_VALUE] => 52 [PROPERTY_WANTED_PHOTO_VALUE_ID] => 293 [~PROPERTY_WANTED_PHOTO_VALUE_ID] => 293 [PROPERTY_FIRSTNAME_VALUE] => Смирнов [~PROPERTY_FIRSTNAME_VALUE] => Смирнов [PROPERTY_FIRSTNAME_VALUE_ID] => 290 [~PROPERTY_FIRSTNAME_VALUE_ID] => 290 [PROPERTY_NAME_VALUE] => Олег [~PROPERTY_NAME_VALUE] => Олег [PROPERTY_NAME_VALUE_ID] => 291 [~PROPERTY_NAME_VALUE_ID] => 291 [PROPERTY_SECONDNAME_VALUE] => Михайлович [~PROPERTY_SECONDNAME_VALUE] => Михайлович [PROPERTY_SECONDNAME_VALUE_ID] => 292 [~PROPERTY_SECONDNAME_VALUE_ID] => 292 [PROPERTY_TEST_VALUE] => test1 [~PROPERTY_TEST_VALUE] => test1 [PROPERTY_TEST_VALUE_ID] => 296 [~PROPERTY_TEST_VALUE_ID] => 296 [NAME] => Разыскивается Смирнов Олег Михайлович как пропавший без вести [~NAME] => Разыскивается Смирнов Олег Михайлович как пропавший без вести [CODE] => smirnov_oleg_mikhaylovich [~CODE] => smirnov_oleg_mikhaylovich [ACTIVE_FROM] => [~ACTIVE_FROM] => [SORT] => 500 [~SORT] => 500 ) [props] => ) |
Как видно извлекать свойства при помощи метода GetProperties() бесполезно, так как массив пуст. И что с этим делать? Пока другого выхода кроме как вводить фильтрацию по условию внутри цикла while - не вижу.
UPD2:
Про CIBlockElement::GetProperty знаю, на этом пока и работает, но хочется сделать одним запросом к базе а не двумя, и судя по документации сделать это можно, но почему значения множественных свойств при этом оказываются пустыми - не понятно.