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

Нашлась замечательная функция _ShowPropertyField($name, $property_fields, $values, $bInitDef = false, $bVarsFromForm = false, $max_file_size_show = 50000, $form_name = "form_element", $bCopy = false). У неё куча параметров, но мне хватило первых трёх.

Первым параметром передаём имя, которое будет подставлено в атрибут name инпутов для привязки элементов инфоблока. Я оставил там только буквы, с дефисом в названии у меня не завелось.

Вторым параметром передаем массив описывающий фейковое свойство. Для корректной работы необходимо передать массив с всего тремя ключами:

  • PROPERTY_TYPE = E. Говорит о том, что свойство «Привязка к элементам инфоблока»
  • MULTIPLE = Y. Свойство будет множественным
  • LINK_IBLOCK_ID = 2. ID инфоблока, к которому привязываемся

В третий параметр можно передать массив уже выбранных значений.

_ShowPropertyField(
    'cartrelatedproducts',
    array(
        'PROPERTY_TYPE' => 'E',
        'MULTIPLE' => 'Y',
        'LINK_IBLOCK_ID' => 2,
    ),
    array(
        array('VALUE' => 1),
        array('VALUE' => 2),
    )
);