Задать вопрос
@shelli

Как прикрепленные файлы через Formit загружать в папку на сервере?

Как в modx отправлять файлы через formit не на почту, а в папку на сервере. А на почту получать только ссылку на этот файл?

[[!FormIt?
   &hooks=`saveFiles,email,redirect`
   &customValidators=`formit2checkfile`
   &emailTpl=`sendEmailTpl`
   &emailTo=`****@gmail.com`
   &emailFrom=`mail@mysite@com`
   &emailSubject=`Консультація online [[++site_url]]`
   &redirectTo=`28`   
   &validate=`name:required,email:email:required,text:required:stripTags,phone:required:isNumber,uploads:formit2checkfile`
   &vTextIsNumber=`Номер телефону повинен містити лише цифри`      
]]


[[!+fi.error_message:notempty=`<p>[[!+fi.error_message]]</p>`]]
<form action="[[~[[*id]]]]" method="post" class="form" enctype="multipart/form-data">
    <input type="hidden" name="nospam:blank" value="" />
    
<label for="name">Ваше ім'я <span class="required">*</span>:</label>
    <span class="error">[[!+fi.error.name]]</span>
    <input type="text" name="name" id="name" value="[[!+fi.name]]" />
 
    <label for="phone">Ваш телефон <span class="required">*</span>:</label>
    <span class="error">[[!+fi.error.phone]]</span>
    <input type="text" name="phone" id="phone" value="[[!+fi.phone]]" />
 
    <label for="email">Ваш Email <span class="required">*</span>:</label>
    <span class="error">[[!+fi.error.email]]</span>
    <input type="text" name="email" id="email" value="[[!+fi.email]]" />
  
    <label for="text">Опис діагноза <span class="required">*</span>:</label>
    <span class="error">[[!+fi.error.text]]</span>
    <textarea name="text" id="text" cols="40" rows="7"
       value="[[!+fi.text]]">[[!+fi.text]]</textarea>
       
    <div>
     <label for="uploads">Загрузити файл</label><br />
     <input type="file" name="uploads" value="[[!+fi.uploads]]" />
    </div><br />
    
     <label>
      <input type="checkbox" required=""> Натисканням на цю кнопку я висловлюю інформовану добровільну згоду на обробку персональних даних за умови дотримання їх захисту відповідно до вимог Закону України “Про захист персональних даних”.
<br/>
      <span class="error error_name">[[+fi.error.opd]]</span>
    </label><br/>

    <input class="submit_button" type="submit" value="Надіслати" />

</form>


Чанк sendEmailTpl
<p>Від кого: [[+name]]</p>
<p>Телефон: [[+phone]]</p>
<p>E-mail: [[+email]]</p>
<p>Опис діагнозу: [[+text]]</p>
<p><a href="[[+uploads]]">[[+uploadName]]</a></p>


Снипет saveFiles

<?php
if (isset($_FILES['uploads'])) {
  if ($_FILES['uploads']['error']==0) {
    $nameFile = $_FILES['uploads']['name'];
    $extFile = mb_strtolower(pathinfo($nameFile, PATHINFO_EXTENSION));
    $uniqNameFile = uniqid('file_', true).'.'.$extFile;
    $newNameFile = 'assets/uploads/'. $uniqNameFile;
    if (move_uploaded_file($_FILES['upload']['tmp_name'], MODX_BASE_PATH.$newNameFile)) {
      $hook->setValue('uploads',$modx->config['site_url'].$newNameFile);
      $hook->setValue('uploadName',$uniqNameFile);
      return true;
    }
  }
}
return false;


На почту файлы приходят, но на сервере не сохраняются. И еще, нужно чтобы можно было отправлять файлы до 300 мб. Есть проверка расширений и размеров файлов, но все равно большие файлы не проходят.

Снипет formit2checkfile

<?php
// инициализируем переменную output, отвечающую за результат работы валидатора, со значением true
$output = true;
// разрешённые расширения файлов
$allowedExt = array('jpg','png','pdf','rar','zip','jpeg');
// максимальный размер файла (307200 Кбайт)
$maxFileSize = 307200 * 1024;
// имя файла
$fileName = basename( $_FILES[$key]['name'] );
// размер
$fileSize = filesize( $_FILES[$key]['tmp_name'] );
// расширение файла
$fileExt = mb_strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
// если имя файла не пустое
if ($fileName != '') {
  if(!in_array($fileExt, $allowedExt)) {
    // файл имеет недопустимый тип
    $errorMsg = 'Файл ' . $fileName . ' имеет не разрешённый тип.';
    $validator->addError($key, $errorMsg);
    $output = false; // возвращаем false
  }
  if($fileSize > $maxFileSize) {
    // файл имеет размер больше максимального
    $errorMsg = 'Размер файла '. $fileName .' превышает 300 Мбайт.';
    $validator->addError($key,$errorMsg);
    $output = false; // возвращаем false
  }
}
return $output;
  • Вопрос задан
  • 1297 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы