Дело было вечером - делать было нечего. Статью опубликовал больше для себя, но если найдете - то можно пользоваться. В статье как настроить форму в MODX при помощи ajaxform, без использования других компонентов, чисто самописка. Пример настройки AjaxForm MODX.
[ [!AjaxForm?
&snippet=`ajaxHandler`
&form=`@INLINE <form class="promotion__form ajaxform">
<input type="hidden" name="pageName" value=[ [*pagetitle]]>
<div class="form-group">
<input type="text" id="input--528871" name="name" value="" placeholder="" required="">
<label for="input--528871">Ваше имя</label>
</div>
<div class="form-group">
<input type="text" id="input--528872" class="js-phone" name="phone" value="" placeholder="" required="">
<label for="input--528872">Номер телефона</label>
</div>
<div class="checkbox-group">
<label class="d-flex">
<input type="checkbox" class="option-input radio" checked="" value="1" required>
<span>Настоящим подтверждаю, что я ознакомлен и согласен с
<a href="policy.html" target="_blank">политикой обработки персональных данных.</a></span>
</label>
</div>
<button type="submit" name="submit" value="goodChoice" class="btn">Отправить</button>
</form>`
]]
Теперь самое главное - код обработчика:
<?php
$emails = array(
'info@site.ru',
);
$action = (isset($_POST['submit']))? $_POST['submit'] : '';
switch($action) {
//Заказать звонок
case "question":
if (empty($_POST['name'])) {
return $AjaxForm->error('Представтесь пожалуйста.');
}
if (empty($_POST['phone'])) {
return $AjaxForm->error('Укажите Ваш телефон, по которому с Вами можно связаться.');
}
$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->set(modMail::MAIL_BODY, '
<p><strong>Имя: </strong>'.$_POST['name'].'</p>
<p><strong>Телефон: </strong>'.$_POST['phone'].'</p>
<p><strong>Страница: </strong>'.$_POST['pageName'].'</p>
');
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
return $AjaxForm->error('Ошибка отправки!');
}
$modx->mail->reset();
return $AjaxForm->success('Ваша заявка принята!');
break;
Ну вот и все, форму можно перенести в чанк, если так не удобно. Остальное править под себя, как угодно... Например написать вычисление IP и блочить всех направо и налево. Зачем? - спросите вы, а это я напишу в следующей статье.