Наконец-то дошли руки до решения данной задачи.
Вкратце опишу задачу: есть форма, в ней есть вопрос типа "dropdown", требуется для данного вопроса брать значения из названия элементов инфоблока.[spoiler]
Главная задача состоит в том, чтобы поддерживать актуальность значений вариантов ответа и элементов инфоблока, т.е. сделать синхронизацию.
Самым простым решением будет использование обработчиков:
Далее приведу основные участки кода, которые надо будет изменить для конкретного сайта.
Здесь надо поменять ID инфоблока, из которого мы будем брать названия элементов:
Если требуется добавлять не все подряд элементы в вопрос формы, то дополнить условие проверкой какого-либо свойства ("Передать в форму?", "да/нет").
Данным кодом формируется массив на добавление ответа на вопрос формы:
Обратите внимание, что мы в данном случае указываем тип вопроса "dropdown". По желанию можно сменить на "multiselect" или другой.
В результате после создания нескольких элементов инфоблока наблюдаем такую картину:
Вот в общем и вся работа. Скачать скрипт init.php можно тут:
Вкратце опишу задачу: есть форма, в ней есть вопрос типа "dropdown", требуется для данного вопроса брать значения из названия элементов инфоблока.[spoiler]
Главная задача состоит в том, чтобы поддерживать актуальность значений вариантов ответа и элементов инфоблока, т.е. сделать синхронизацию.
Самым простым решением будет использование обработчиков:
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 можно тут: