GrabDuck

1С-Битрикс Разработчикам - Веб формы: Варианты ответов на основе элементов инфоблоков

:

Наконец-то дошли руки до решения данной задачи.
Вкратце опишу задачу: есть форма, в ней есть вопрос типа "dropdown", требуется для данного вопроса брать значения из названия элементов инфоблока.

Главная задача состоит в том, чтобы поддерживать актуальность значений вариантов ответа и элементов инфоблока, т.е. сделать синхронизацию.
Самым простым решением будет использование обработчиков:

AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnAfterIBlockElementHandler", 1000);
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockElementHandler", 1000);
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "OnBeforeIBlockElementUpdateHandler", 1000);
AddEventHandler("iblock", "OnBeforeIBlockElementDelete", "OnBeforeIBlockElementDeleteHandler", 1000);

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

$QUESTION_ID = 39; // ID вопроса, в который мы будем добавлять ответы

Здесь надо поменять ID инфоблока, из которого мы будем брать названия элементов:

function OnAfterIBlockElementHandler(&$arFields)
{
     if ($arFields["IBLOCK_ID"] != '3' || intval($arFields["RESULT"]) <= 0) 
         return $arFields;

Если требуется добавлять не все подряд элементы в вопрос формы, то дополнить условие проверкой какого-либо свойства ("Передать в форму?", "да/нет").

Данным кодом формируется массив на добавление ответа на вопрос формы:

$arAdd = Array("QUESTION_ID"=> $QUESTION_ID, "MESSAGE"=> $arFields["NAME"], "FIELD_TYPE"=> "dropdown");

Обратите внимание, что мы в данном случае указываем тип вопроса "dropdown". По желанию можно сменить на "multiselect" или другой.

В результате после создания нескольких элементов инфоблока наблюдаем такую картину:

Вот в общем и вся работа. Скачать скрипт init.php можно тут: