Меню

Ciblockelement getpropertyvaluesarray не работает

GetPropertyValuesArray

Получение значений свойств элементов одного инфоблока для компонента. Строго рекомендуется как замена кода вида в целях улучшения производительности.

Параметры функции

Параметр Описание
result Массив результатов, в качестве ключей должен содержать ID элементов. Передается по ссылке. Для каждого элемента вернет массив значений свойств.
iblockID ID инфоблока (ЕДИНИЧНОЕ значение)
filter Фильтр CIBlockElement::GetList для отбора элементов. Ключ IBLOCK_ID указывать нет необходимости — он будет добавлен внутри метода.
propertyFilter Фильтр для отбора свойств. необязательный. Может содержать 3 ключа. либо ID — массив ID возвращаемых свойств. либо CODE — массив символьных кодов свойств. При указании обоих ключей учитывается только ID. Третий ключ — фильтр по активности свойств. Если не указать — будут выведены только активные свойства
options Дополнительные настройки. Необязательный. Возможные ключи:
USE_PROPERTY_ID = Y — ключами массива значений для каждого элемента использовать ID свойств. Иначе — символьные коды.
PROPERTY_FIELDS — массив полей СВОЙСТВА, возвращаемых в результате.
GET_RAW_DATA => Y — в этом случае в возвращаемых данных не будет ключей с

в начале, а оставшиеся не будут приведены к html-безопасному виду.

Возвращаемое значение

Возвращаемое значение — нет.

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Источник

GetPropertyValues

Описание и параметры

Метод позволяет получить значения свойств для элементов одного информационного блока, отобранных по фильтру

Параметры функции

Параметр Описание
IBLOCK_ID ID инфоблока (ЕДИНИЧНОЕ значение).
arElementFilter Фильтр CIBlockElement::GetList для отбора элементов. Ключ IBLOCK_ID указывать нет необходимости — он будет добавлен внутри метода.
extMode Признак возврата расширенного числа полей. Необязательный.
propertyFilter Фильтр возвращаемых свойств. необязательный. Может иметь только 1 ключ — ID. Это массив ID возвращаемых свойств. Если пуст — будут возвращены значения всех свойств инфоблока, включая неактивные.

Возвращаемое значение

Возвращаемое значение — объект типа CIBlockPropertyResult .

Если $extMode = false, то возвратятся следующие ключи для каждого значения свойства:

IBLOCK_ELEMENT_ID — ID элемента,
IBLOCK_PROPERTY_ID — ID свойства,
VALUE — строковое значение свойства,
VALUE_NUM — цифровое значение свойства (имеет смысл для свойств типа число, список, привязка к элементам, разделам, файловым и производным от них).

Если $extMode = true, то дополнительно вернутся ключи:

PROPERTY_VALUE_ID — ID записи значения свойства в базе,
DESCRIPTION — описание значения свойства (если есть).

Результат отсортирован по полю IBLOCK_ELEMENT_ID

Примеры использования

Получить все значения свойств с кодами 10 и 14 активных элементов инфоблока 5

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Источник

GetPropertyValuesArray

The method gets values of property elements for single component iblock. It is strictly recommended as replacement for the following code to improve performance.

Function parameters

Parameter Description
result Array of results, must contain element IDs as keys. The array is passed via link. Returns array of property values for each element.
iblockID Iblock ID (SINGLE value)
filter Filter CIBlockElement::GetList for selecting elements. No need to specify the IBLOCK_ID key — it will be added within the method.
propertyFilter Filter for selection of properties. Optional. Can contain 3 keys: an ID — array of returned property IDs or a CODE — array of symbolic property codes. Only ID is specified when indicating both keys. Third key — filter for property activity. If now specified — only active properties are printed
options Additional settings. Optional. Possible keys:
USE_PROPERTY_ID = Y — property IDs are used as value array keys for each element. Otherwise — use symbolic codes.
PROPERTY_FIELDS — array of PROPERTY fields, returned as the result.
GET_RAW_DATA => Y — in this case, the returned data won’t contain keys stating with

, and the rest of won’t be converted to HTML safe format.

Returned value

Returned value — none.

Examples

User Comments

User comments are not part of official documentation. Use information provided by other users in the comments at your own risk.

The User Comments section is not to be used as a feature discussion board. Only registered users can post comments. Your comment will be visible once it has been approved by the moderator.

Источник

SetPropertyValues

Описание

Метод сохраняет значения всех свойств элемента информационного блока. Статический метод.

Внимание! Удалять и обновлять несколько значений файлового свойства можно только ОДНИМ вызовом, а не несколькими, так как меняются ID значений свойств.

Смотрите также

Параметры вызова

Параметр Описание
ELEMENT_ID Код элемента, значения свойств которого необходимо установить.
IBLOCK_ID Код информационного блока.
PROPERTY_VALUES Массив значений свойств, в котором коду свойства ставится в соответствие значение свойства.
Если PROPERTY_CODE установлен, то должен содержать одно или массив всех значений свойства (множественное) для заданного элемента.
Если PROPERTY_CODE равен false, то PROPERTY_VALUES должен быть вида Array(«код свойства1″=>»значения свойства1», . ), где «код свойства» — числовой или символьный код свойства, «значения свойства» — одно или массив всех значений свойства (множественное). При этом массив PROPERTY_VALUES должен содержать полный набор значений свойств для данного элемента, т.е. если в нем будет остутствовать одно из свойств, то все его значения для данного элемента будут удалены.
Это справедливо для всех типов свойств кроме типа файл. Файлы надо удалять через массив с параметром «del»=>»Y».
Если свойство типа файл множественное, то файл будет удален в случае присутствия параметра del, независимо от принимаемого им значения.

  • Для свойства типа Список следует передавать идентификатор значения свойства, а не значение.
  • PROPERTY_CODE Код изменяемого свойства. Если этот параметр отличен от false, то изменяется только свойство с таким кодом. Не обязательный параметр, по умолчанию равен false.

    Примеры использования

    Пример 2 (код вызова метода для свойства типа «Строка»):

    Пример 3 (код вызова метода для свойства типа «HTML/text»):

    Пример 4 (добавление описания к значению):

    Пример 5 (удаление свойства типа «Файл»):

    Если требуется обновить всю карточку товара, включая свойства со значениями множественного типа (вместе с их описанием), то это можно сделать одним вызовом Update. Следует добавить описание (DESCRIPTION) к значениям (VALUE) свойств множественного типа, в PROPERTY_VALUES прописать числовой или символьный код свойства (множественного типа) и присвоить массив со значениями типа:

    Пользовательские комментарии

    Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

    Для этого нужно всего лишь авторизоваться на сайте

    Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

    Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

    Источник

    ORM-обёртка для инфоблоков

    Потребовалось для одного проекта скрестить инфоблоки с собственными таблицами, всяческими сквозными фильтрами и сортировками. Да и ещё и работало чтоб быстро. Первое, что приходит на ум — ORM. Но она в инфоблоках пока отсутствует (точнее, отсутствует самая нужная её часть — работа с элементами), поэтому пришлось реализовывать свою прослойку, которой и хочу поделиться — https://github.com/unnamed777/IblockOrm

    Краткие характеристики

    Обёртка состоит из трёх классов:

    Все они находятся под рекомендуемым namespace Vendor\Module, в моём случае — \nav\IblockOrm. Кстати говоря, нагромождение папок в обёртке может показаться странным, но предполагается, что она будет находиться в /local примерно вот так:

    Как использовать
    Для начала зарегистрируем классы в автолоадере (можно и просто заинклудить):

    (аналогично обычному гетлисту).

  • По умолчанию ORM выбирает только скалярные поля, поэтому для получения желаемых свойств их надо явно указывать в select. Либо использовать хелпер для получения всех свойств.
  • Для получения ссылки на элемент надо в select указать DETAIL_PAGE_URL. Это динамически вычисляемое поле, поэтому по умолчанию оно не заполняется.
  • Постраничная навигация стартует автоматически, если в выборке были указаны и limit, и offset.
  • При фильтре по множественному свойству элементы могут дублироваться. Чтобы этого избежать, надо добавить в select поле DISTINCT (см. комментарии к посту).
  • Что внутри
    Главный класс — ElementTable — это наследник от DataManager с getMap() (метод, описывающий поля сущности), который считывает свойства и строит по ним поля-референсы PROPERTY_*. Референсы эти ведут на:

    Постраничная навигация
    Как выше уже упоминал, постраничка стартует автоматически, если указаны limit и offset в запросе. Поскольку в ORM такое понятие отсутствует, пришлось немного извратиться. Объект \Main\DB\Result (результат работы getList()) дополняется свойством oldCDBResult — старым CDBResult, который содержит стандартную информацию о текущей странице, количестве элементов и т.п, и используется для получения кода постранички. С первого раза, полагаю, понять сложно, поэтому вот пример кодом «было/стало».

    Так выглядит классическая постраничка в news.list:

    Как видно, поменялось «практически ничего».

    Хелпер для получения всех свойств
    Чтобы получить свойства элемента, можно в явном виде перечислить их в select. Но если их много или же нужна дополнительная информация о них, можно получить сразу все свойства для всех элементов выборки с помощью вспомогательного метода:

    Внутри используется магия \CIBlockElement::GetPropertyValuesArray() — та же, что применяется в catalog.section для существенного сокращения количества запросов к БД по сравнению с _CIBlockElement::GetProperties().

    Хелпер для получения Query
    Порой при отладке требуется залезть напрямую в объект запроса, но стандартный датаменеджер сразу возвращает объект результата выборки Bitrix\Main\Db\Result. Поэтому был добавлен ещё один метод, являющийся полной копией DataManager::getList(), но возвращающий Bitrix\Main\Entity\Query вместо Result:

    Пример компонента
    Если вы смогли дочитать до этого места, то наверняка уже заглянули на гитхаб и увидели там компонент . Это простой пример компонента, использующий для вывода списка элементов orm-обёртку. Изначально это был компонент в рабочем проекте, из которого я выпилил всю лишнюю логику, но не стал менять общей структуры, поэтому он может выглядеть монструозно. Основная логика находится в методах getItems() и formatResult(). А ещё в качестве бонуса там остался закомментированный код для реализации постранички со своей переменной/чпу.

    Вместо тысячи слов
    Просто для демонстрации — пример скомпанованного запроса с фильтром по свойствам инфоблока и сторонней таблице и сортировкой по агрегированному полю сторонней таблицы. Быстро, просто и безболезненно.

    Источник

    Читайте также:  Как настроить настенный газовый котел лемакс
    Adblock
    detector