Привет Макс!
А мне нужно с Вами переговорить.
Мами
А мне нужно с Вами переговорить.
Мами
18.12.2007 23:06:08
Привет Макс!
А мне нужно с Вами переговорить. Мами |
|
|
|
27.09.2008 09:12:37
Получается следующая ситуация.
Метод CIBlockSection::GetList() принимает параметры: $arOrder - порядок сортировки, описан в документации $arFilter - фильтрация, описана в документации $bIncCnt - флаг "выводить ли количество элементов", описан в документации, по умолчанию false $arSelect - список пользовательских полей, которые надо вернуть, по умолчанию array() $arSelect имеет следующий синтаксис: 1) array() - не выбирать пользовательские поля CIBlockSection::GetList($arOrder, $arFilter, false, array()) для этого случая можно просто не указывать последний параметр 2) array($name [, $name2 ...]) - выбрать только указанные в массиве пользовательские поля CIBlockSection::GetList($arOrder, $arFilter, false, array('UF_TYPE')) добавит к результату ключ UF_TYPE CIBlockSection::GetList($arOrder, $arFilter, false, array('UF_TYPE', 'UF_STATUS')) добавит к результату ключи UF_TYPE и UF_STATUS и т.п. 3) array('UF_*') - выбрать все пользовательские поля по маске CIBlockSection::GetList($arOrder, $arFilter, false, array('UF_*')) если у группы есть пользовательские поля UF_TYPE, UF_STATUS и UF_VERSION, к результату будут добавлены все Тут возникает вопрос. Можно ли эту маску использовать произвольно, например CIBlockSection::GetList($arOrder, $arFilter, false, array('*')); или CIBlockSection::GetList($arOrder, $arFilter, false, array('_*')); и т.п.? Для тех, кто считает, что между конструкциями CIBlockSection::GetList($arOrder, $arFilter, false, array('UF_*')); и CIBlockSection::GetList($arOrder, $arFilter, false, $arSelect = array('UF_*')); есть какая-то разница в выполнении метода, спешу сообщить, что её нет. Последняя конструкция аналогична следующему коду: $arSelect = array('UF_*'); CIBlockSection::GetList($arOrder, $arFilter, false, $arSelect); Наблюдается интересная особенность. Если в фильтре не указать параметр 'IBLOCK_ID', выборка не вернёт пользовательские поля. Т.о. такой код будет работать правильно: CIBlockSection(array(), array('IBLOCK_ID' => $iblock_id, 'ID' => $id), false, array('UF_*')); а такой уже нет: CIBlockSection(array(), array('ID' => $id), false, array('UF_*')); Но это ещё полбеды. Если я хочу для переносимости кода между базами использовать вместо 'IBLOCK_ID' фильтр по 'IBLOCK_CODE', то пользовательские поля получены не будут. Такой код не будет работать, как ожидается: CIBlockSection(array(), array('IBLOCK_CODE' => $iblock_code, 'ID' => $id), false, array('UF_*'));
Матвеев прижал руки к груди, поднял плечи, согнулся и побежал.
(Д. Хармс про Битрикс) |
|
|
|
27.09.2008 12:12:19
В документации по GetList вроде четко сказано: Массив возвращаемых полей элемента. Список полей элемента, а также можно сразу выводить значения его свойств. Обязательно должно быть использовано поле IBLOCK_ID, иначе не будет работать корректно. Кроме того, также в качестве одного из полей необходимо указать PROPERTY_<PROPERTY_CODE>, где PROPERTY_CODE - ID или мнемонический код. |
|||
|
|
27.09.2008 12:25:03
Обратите внимание, что я пишу не про CIBlockElement::GetList(), а про CIBlockSection::GetList(). Вы привели мне цитату со страницы А теперь найдите, пожалуйста, что-нибудь подобное на странице Хочу отдельно подчеркнуть, что такое ограничение по IBLOCK_ID негативно сказывается на переносимости кода, поскольку намертво привязывается к пространству ID конкретной базы данных. Конечно же, выходы есть, но самый очевидный и действенный теряется.
Матвеев прижал руки к груди, поднял плечи, согнулся и побежал.
(Д. Хармс про Битрикс) |
|||
|
|
06.10.2008 06:02:13
Мда, тоже сейчас довольно помучался пытаясь получить значение пользовательского свойства раздела иблока. Потому что в документации в описании CIBlockSection::GetList() вооще причего не сказано про $arSelect и про необходимость задавать IBLOCK_ID при выборке..
|
|
|
|
28.10.2008 19:56:10
Это все замечательно. Но мне необходимо еще и получить как минимум тип этого пользовательского поля.. Не подскажете, как я могу это сделать? :)
Когда я упал на самое дно, снизу постучали. (с) Станислав Ежи Лец.
|
|||
|
|
12.03.2009 12:37:08
По всей видимости в настоящий момент получить какую-то информацию о пользовательском поле посредством метода CIBlockSection::GetList (название, тип, значение выбранного элемента списка..) не представляется возможным. Метод в массиве возвращает единственным элементом значение пользовательского свойства раздела. |
|||
|
|
12.03.2009 12:42:52
Это можно сделать с помощью методов класса CUserTypeEntity()
Когда я упал на самое дно, снизу постучали. (с) Станислав Ежи Лец.
|
||||
|
|
|||