Ближе к делу
Итак, что имеем:
Обычная форма. При клике на отправить обрабатывается JQUERY и предает данные в /inlude/ajax/form.php. Разумеется все работает AJAX-ом.
Теперь добавляем в шаблон формы компонент:
$APPLICATION->IncludeComponent("bitrix:main.file.input", "drag_n_drop",
array(
"INPUT_NAME"=>"FILE",
"MULTIPLE"=>"N",
"MODULE_ID"=>"main",
"MAX_FILE_SIZE"=>"100000",
"ALLOW_UPLOAD"=>"F",
"ALLOW_UPLOAD_EXT"=>""
),
false
);?>
Ищем компонент в /bitrix/components/main.file.input/ копируем шаблон в шаблон сайта. переименуем шаблон в drag_n_drop - на случай если будем менять стили.
Открываем форму и видим такую красоту:
Кстати, можно сделать мульти загрузку, задать маску входных файлов.
Компонент загружает файл в /upload/main/ и после загрузки возвращает id файла.
Сохранение в инфоблок и отправка письма с файлом
Открываем файл /include/ajax/form.phpТут только пример.
CModule::IncludeModule('iblock');
$el = new CIBlockElement;
$arLoadProductArray = Array(
"MODIFIED_BY" => 1,
"IBLOCK_SECTION_ID" => false,
"IBLOCK_ID" => 9,
"ACTIVE" => "Y"
);
/*
Проверяйте входные данные. Это только пример!
*/
$arLoadProductArray["NAME"] = $_POST['NAME'];
$arLoadProductArray['PROPERTY_VALUES']['PHONE'] = $_POST['PHONE'];
$arLoadProductArray['PROPERTY_VALUES']['FILE'] = $_POST['FILE'];
//Добавили в инфоблок
$PRODUCT_ID = $el->Add($arLoadProductArray);
//Отправляем письмо
$arSend = Array(
"NAME"=>$_POST['NAME'],
"PHONE"=> $_POST['PHONE']
);
CEvent::SendImmediate(
$_POST['EVENT'],
SITE_ID,
$arSend,
"Y",
"",
Array( $_POST['FILE']])
);
?>
Не все гладко у Bitrix
Ты же нутром чуешь что не все так просто у Битрикса. И твое чутье тебя не обманывает. Есть несколько нюансов.
1. Пользователь загрузил файл. Но не отправил данные. Таких файлов может быть много. Решил проблему так: скопировал компонент в свое простарнство имен. Открыл файл file.php и код в строке 351 ( CFile::SaveFile (.......) изменил на
if (($fileID = CFile::SaveFile($file, 'appeal_files', $md5)) appeal_files - своя папка. Получается все файлы загружаются в эту папку.
После отпавки данных можно переместить из этой папки файлы, например в main и очистить папку appeal_files . СОгласен, некарсиво, но работает.
Комментариев нет:
Отправить комментарий