Ближе к делу
Итак, что имеем:
Обычная форма. При клике на отправить обрабатывается 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 . СОгласен, некарсиво, но работает.



Комментариев нет:
Отправить комментарий