Столкнулся с проблемой настройки вебформы во всплывающем окне. Задача проста, есть вебформа во всплывающем окне с рядом полей и загрузкой файла, нужно настроить ее работу. Реализовать получилось все, кроме отправки файла в результат вебформы. Вот код обработки отправки по клику:
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?>
<sc ript type="text/javascript" src="/bitrix/js/main/ajax.js"></sc ript>
<?
$APPLICATION->IncludeComponent("bitrix:form.result.new", "WF_FORM_TPL", Array(
"WEB_FORM_ID" => "1", // ID веб-формы
"IGNORE_CUSTOM_TEMPLATE" => "N", // Игнорировать свой шаблон
"USE_EXTENDED_ERRORS" => "Y", // Использовать расширенный вывод сообщений об ошибках
"SEF_MODE" => "N", // Включить поддержку ЧПУ
"VARIABLE_ALIASES" => array(
"WEB_FORM_ID" => "WEB_FORM_ID",
"RESULT_ID" => "RESULT_ID",
),
"CACHE_TYPE" => "N", // Тип кеширования
"CACHE_TIME" => "3600", // Время кеширования (сек.)
"LIST_URL" => "", // Страница со списком результатов
"EDIT_URL" => "", // Страница редактирования результата
"SUCCESS_URL" => "", // Страница с сообщением об успешной отправке
"CHAIN_ITEM_TEXT" => "", // Название дополнительного пункта в навигационной цепочке
"CHAIN_ITEM_LINK" => "", // Ссылка на дополнительном пункте в навигационной цепочке
//"AJAX_MODE" => "Y", // режим AJAX
//"AJAX_OPTION_SHADOW" => "N", // затемнять область
//"AJAX_OPTION_JUMP" => "N", // скроллить страницу до компонента
//"AJAX_OPTION_STYLE" => "Y", // подключать стили
//"AJAX_OPTION_HISTORY" => "N",
),
false
);?>
Собственно, а как реализовать запись файла в результат вебформы не могу разобраться. Пробовал, как написано в этой статье http://alexvaleev.ru/ajax-form-bitrix-popup/ , но у меня не заработало, возможно потому что не fancybox используется или еще по каким причинам, но при "AJAX_MODE" => "Y" (с отключением обработки клика кнопки формы) страница перезагружается и выдается содержимое результата файла form.php, без форматирования, голые поля вебформы. Если кто-то реализовывал подобное, подскажите, пожалуйста, как решить проблему.
Через AJAX файлы не передаются. Поэтому вариантов два: 1) использовать что-то типа uploadify, 2) использовать скрытый iframe. Второй способ ИМХО лучше: быстрее, проще и кроссбраузернее. У нас так сделан модуль отзывов. Все что нужно - это форме задать таргет (<form target=""></form>) где указать ID ифрейма, и обрабатывать событие onload этого ифрейма. А уже сам ифрейм сделает все точно как обычно, передаст POST и отправит файлы, т.е. выполнит полный запрос к битриксу без перезагрузки страницы. Задача - обработать результат (как-то умудриться передать результат скрипту) и все. Конечно, здесь много подводных камней, но просто почитайте про form + target + iframe - и все станет ясно.
Максим Каськов написал: а по поводу аякс режима для компонента вебформы не подскажите, почему могло не сработать?
Были когда-то проблемы с данным режимом. Если шаблон формы свой, то главное, чтобы action формы был указан (по умолчанию POST_FORM_ACTION_URI) и идентификатор сессии bitrix_sessid_post(). В последствии выяснилось, что режим AJAX не срабатывал из-за ошибки в обработчике onAfterResultAdd.