Доброго времени суток.
Недавно на форуме встретил интересную задачу клиента: при переводе результата заполнения веб формы в определённый статус создавать событие в календаре событий компании.
Задачу решал с помощью обработчиков, стараясь сделать код максимально универсальным. Где этого сделать не удавалось - вставлял константы.
[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));
}
}
}
}
?> |
Что у нас получилось:

Спасибо за внимание.