Всем привет! Наткнулся недавно на интересную задачку: Есть список фестивалей в разных городах. У каждого фестиваля есть список Событий данного фестиваля. Структурно это выглядет так: события фестиваля - это элементы инфоблока, а фестивали - это обязательное свойство типа Справочник у элемента. Нужно при выборе фестиваля на карте, показывать первыми события данного фестиваля, а следом - события остальных фестивалей. Т.е. именно сортировать элементы, а не фильтровать.
$IBLOCK_PROPERTY_ID - Идентификатор свойства в Инфоблоке, (фильтруем по нему, чтобы отбросить другие свойства.) $PROPERTY_VALUE - Значение свойства, т.е. первыми в нашем случае, как раз должны идти элементы, у которых указано это значение
Суть заключается в следующем: Мы добавляем динамически вычисленный столбец "FESTIVAL_ORDER". В случае, если заданное значение свойства равно указанному у элемента, то столбец заполняется 1, иначе - 0. За это отвечает код:
new Entity\ExpressionField('FESTIVAL_ORDER', '%s = '.$PROPERTY_VALUE, array('FESTIVAL.VALUE'))
Далее сортируем по вычисленному значению.
Чтобы определить значения свойства элемента, использовал ReferenceField. Отдельная благодарность автору статьи https://dev.1c-bitrix.ru/community/web...log/19113/ за ORM сущность IblockElementPropertyTable
new Entity\ReferenceField(
'FESTIVAL',
'IblockElementPropertyTable',
Array(
'=this.ID' => 'ref.IBLOCK_ELEMENT_ID',
)
),
Надеюсь, кому-нибудь пригодится.
Указанное решение работает только с НЕ множественными свойствами. Будьте внимательны!
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».