Как в 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;