Доброго времени суток.
Недавно на форуме встретил интересную задачу клиента: при переводе результата заполнения веб формы в определённый статус создавать событие в календаре событий компании.
Задачу решал с помощью обработчиков, стараясь сделать код максимально универсальным. Где этого сделать не удавалось - вставлял константы.
[spoiler]
Принцип работы такой:
1. В символьный код веб формы добавляем произвольный набор символов (FORM_SID), не обязательно SID формы должен совпадать со значением константы FORM_SID.
2. Теперь после создания нового результата в веб форме с определённым SID будет создан новый статус с названием STATUS_TITLE.
3. Редактор сайта "проверяет" результат заполнения, переводит его в новый статус, в нашем случае "в календарь".
4. После этого в календаре событий компании (с ID, указанным в IBLOCK_CALENDAR) создаётся новый подкалендарь с названием CALENDAR_NAME.
5. Название и время события берутся из ответов на вопросы веб формы - FORM_FIELD_NAME и FORM_FIELD_DATE соответственно.
Итак код в /bitrix/php_interface/init.php:
Что у нас получилось:
Спасибо за внимание.
Недавно на форуме встретил интересную задачу клиента: при переводе результата заполнения веб формы в определённый статус создавать событие в календаре событий компании.
Задачу решал с помощью обработчиков, стараясь сделать код максимально универсальным. Где этого сделать не удавалось - вставлял константы.
[spoiler]
Принцип работы такой:
1. В символьный код веб формы добавляем произвольный набор символов (FORM_SID), не обязательно SID формы должен совпадать со значением константы FORM_SID.
2. Теперь после создания нового результата в веб форме с определённым SID будет создан новый статус с названием STATUS_TITLE.
3. Редактор сайта "проверяет" результат заполнения, переводит его в новый статус, в нашем случае "в календарь".
4. После этого в календаре событий компании (с ID, указанным в IBLOCK_CALENDAR) создаётся новый подкалендарь с названием CALENDAR_NAME.
5. Название и время события берутся из ответов на вопросы веб формы - FORM_FIELD_NAME и FORM_FIELD_DATE соответственно.
Итак код в /bitrix/php_interface/init.php:
<? AddEventHandler('form', 'onAfterResultAdd', 'my_onAfterResultAdd'); AddEventHandler('form', 'onAfterResultStatusChange', 'my_onAfterResultStatusChange'); define ("STATUS_TITLE", 'в календарь'); define ("CALENDAR_NAME", "События с формы"); define ("FORM_SID", 'CALENDAR'); define ("IBLOCK_CALENDAR", 14); define ("FORM_FIELD_NAME", "ADDRESS"); define ("FORM_FIELD_DATE", "DATE"); function my_onAfterResultAdd($WEB_FORM_ID, $RESULT_ID) { if (IsModuleInstalled('intranet')) { $arFormFilter = array( "ID" => $WEB_FORM_ID, "SID" => FORM_SID, "SID_EXACT_MATCH" => "N", ); $rsForm = CForm::GetList($by="s_id", $order="desc", $arFormFilter); if ($rsForm->Fetch()) { $arStatusFilter = array( "TITLE" => ToLower(STATUS_TITLE), "ACTIVE" => "Y", ); $rsStatuses = CFormStatus::GetList($WEB_FORM_ID, $by="s_id", $order="desc", $arStatusFilter); if (!$rsStatuses->Fetch()) { $arFields = array ( "FORM_ID" => $WEB_FORM_ID, "C_SORT" => 500, "ACTIVE" => "Y", "TITLE" => STATUS_TITLE, "DEFAULT_VALUE"=> "N", ); CFormStatus::Set($arFields, false, 'N'); } } } } function my_onAfterResultStatusChange($WEB_FORM_ID, $RESULT_ID, $NEW_STATUS_ID, $CHECK_RIGHTS) { if (IsModuleInstalled('intranet')) { $arStatusFilter = array( 'TITLE' => STATUS_TITLE, 'ID' => $NEW_STATUS_ID, 'ACTIVE' => "Y", ); $rsStatuses = CFormStatus::GetList($WEB_FORM_ID, $by="s_id", $order="desc", $arStatusFilter); if ($rsStatuses->Fetch()) { $arAnswer = CFormResult::GetDataByID ($RESULT_ID, array(FORM_FIELD_NAME, FORM_FIELD_DATE)); if ($arAnswer[FORM_FIELD_NAME][0]["USER_TEXT"] != '' && $arAnswer[FORM_FIELD_DATE][0]["USER_TEXT"] != '') { CModule::IncludeModule('iblock'); $dbSection = CIBlockSection::GetList(array(),array("IBLOCK_ID"=> IBLOCK_CALENDAR, "NAME"=> CALENDAR_NAME)); if ($arSection = $dbSection->Fetch()) { $arrFields = array('IBLOCK_SECTION_ID' => $arSection["ID"]); }else{ $sec = new CIBlockSection; $add = $sec->Add (array("IBLOCK_ID"=> IBLOCK_CALENDAR, "NAME"=> CALENDAR_NAME)); $arrFields = array("IBLOCK_SECTION_ID" => $add); } $arFields = array( "NAME" => $arAnswer[FORM_FIELD_NAME][0]["USER_TEXT"], "ACTIVE_FROM" => $arAnswer[FORM_FIELD_DATE][0]["USER_TEXT"], //"ACTIVE_TO" => ConvertTimeStamp($to), "ACTIVE_TO" => $arAnswer[FORM_FIELD_DATE][0]["USER_TEXT"], "IBLOCK_ID" => IBLOCK_CALENDAR, ); $el = new CIBlockElement; $PRODUCT_ID = $el->Add(array_merge($arFields, $arrFields)); } } } } ?> |
Что у нас получилось:
Спасибо за внимание.