Итак, Вам нужна форма обратной связи на вашем сайте с CMS MODx. Окей, следуйте пошаговой инструкции и вы получите функциональную форму обратной связи:)
Сначала требуется установить пакет, заходим в систему — Приложения — Установщик — Ajax Form.
В месте где хотим увидеть нашу форму пишем:
Код сниппета:
[ [!AjaxForm?
&snippet=`formAjax`
&formSelector=`test_form`
&form=`@INLINE <form method="post" enctype="multipart/form-data">
Имя
<input type="text" name="name" placeholder="Введите имя" />
Телефон
<input type="text" name="phone" placeholder="Введите телефон" />
Email
<input type="text" name="email" placeholder="Введите email" />
Комментарии
<input type="text" name="comment" placeholder="Введите комментарий" />
Прикрепить файл
<input type="file" name="file" />
<button type="submit" name="submit" value="request_app">Отправить</button>
</form>` ]]
Дальше потребуется создать новый сниппет для валидации формы, название указывайте такое же, как в &snippet=``. Код сниппета:
<?php
$emails = array(
'test@gmail.com',
);
$action = (isset($_POST['submit']))? $_POST['submit'] : '';
switch($action) {
case "request_app":
if (empty($_POST['name'])) {
return $AjaxForm->error('Укажите имя');
}
if (empty($_POST['phone'])) {
return $AjaxForm->error('Укажите номер');
}
if (empty($_POST['email'])) {
return $AjaxForm->error('Укажите email');
}
if (empty($_POST['comment'])) {
return $AjaxForm->error('Укажите коммент');
}
if(sizeof($_FILES) != 0){
if ($_FILES["file"]["error"] != 0) {
return $AjaxForm->error('Ошибка загрузки файла.');
}
if($_FILES["file"]["size"] > 10000000){
return $AjaxForm->error('Объем файла не должен превышать 10Мб.');
}
if (($_FILES["file"]["type"] == "application/zip") || ($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "application/vnd.ms-excel") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "application/x-rar-compressed")) {
$file = $_FILES['file']['name'];
$fileInfoArr = pathinfo($file);
$targetFile = time().'.'.$fileInfoArr['extension'];
$sourceFile = $_FILES['file']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'].'/upload/'.$targetFile; if(!move_uploaded_file($sourceFile, $targetPath)){
return $AjaxForm->error('Ошибка загрузки файла.');
}
}else{
return $AjaxForm->error('Допустимые форматы файлов — rar, jpg, jpeg, png, excel');
}
} $modx->getService('mail','mail.modPHPMailer'); $modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
foreach($emails as $email){
$modx->mail->address('to', $email);
}
$modx->mail->set(modMail::MAIL_SUBJECT,'Запрос на расчет КП');
$modx->mail->attach($targetPath);
$modx->mail->set(modMail::MAIL_BODY, '
Имя: '.$_POST['name'].'
Телефон: '.$_POST['phone'].'
Почта: '.$_POST['email'].'
Комментарий: '.$_POST['comment'].'
'); $modx->mail->setHTML(true);
if (!$modx->mail->send()) { return $AjaxForm->error('Ошибка отправки!');
}
$modx->mail->reset();
return $AjaxForm->success("Ваш запрос успешно отправлен");
break;
}
Дополнительная информация:
Для того, чтобы сделать условия по типу файла, нужно указать нужный.
if (($_FILES["file"]["type"] == "ваш тип файла") || ($_FILES["file"]["type"] == "ваш тип файла")) {
$file = $_FILES['file']['name'];
$fileInfoArr = pathinfo($file);
$targetFile = time().'.'.$fileInfoArr['extension'];
$sourceFile = $_FILES['file']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'].'/upload/'.$targetFile; if(!move_uploaded_file($sourceFile, $targetPath)){ return $AjaxForm->error('Ошибка загрузки файла.'); }
Часто встречаемые mime-типы:
Пользуйтесь на здоровье!