MODx Revo Отправка подтверждения по почте в FormIt

Старшие версии FormIt уже наделены описываемым в статье функционалом. Но все же приведенный пример может быть полезен в качестве урока по созданию своих хуков (hoocks).


В качестве примера будем использовать форму обратной связи с четырьмя полями: имя, e-mail, тема и сообщение. При отправке формы FormIt должен будет отправлять 2 письма — администратору сайта и пользователю, оставившему сообщение.
Для этого нам понадобится создать новый чанк и новый сниппет. Чанк будет шаблоном для письма, а сниппет будет использовать его для отправки.

Следующий код состоит из двух частей. Вызов сниппета FormIt и непосредственно сама форма. Обатите внимание на передаваемы сниппету в параметрах хук emailUser. Он как раз и будет заниматься отправкой письма пользователю.

  1. [[!FormIt?  
  2.     &hooks=`spam,email,emailUser,redirect`  
  3.     &emailTo=`YOUR-EMAIL`  
  4.     &emailSubject=`CONTACT FORM: [[+subject]]`
  5.     &emailFromName=`[[+name]]`
  6.     &emailTpl=`ContactTpl`
  7.     &redirectTo=`6`  
  8. ]]
  9.  
  10. <div class="error">[[+fi.error.error_message]]</div>
  11.  
  12. <form action="[[~[[*id]]]]" method="post" class="form">
  13.  
  14.     <input type="hidden" name="nospam:blank" value="" />
  15.  
  16.     <div class="formRow">
  17.         <label for="name">Name: </label>
  18.         <input type="text" name="name:required" id="name" value="[[+fi.name]]" />
  19.         <span class="error">[[+fi.error.name]]</span>
  20.     </div>
  21.  
  22.     <div class="formRow">
  23.         <label for="name">Email: </label>
  24.         <input type="text" name="email:email:required" id="email" value="[[+fi.email]]" />
  25.         <span class="error">[[+fi.error.email]]</span>
  26.     </div>
  27.  
  28.     <div class="formRow">
  29.         <label for="subject">Subject: </label>
  30.         <input type="text" name="subject:required:stripTags" id="subject" value="[[+fi.subject]]" />
  31.         <span class="error">[[+fi.error.subject]]</span>
  32.     </div>
  33.  
  34.     <div class="formRow">
  35.         <label for="message">Message: </label><span class="error">[[+fi.error.message]]</span> <br/>
  36.         <textarea name="message:required:stripTags" id="message" cols="55" rows="7">[[+fi.message]]</textarea>
  37.     </div>
  38.  
  39.     <div class="formRowSubmit">
  40.         <input type="submit" value="Send" name="Submit"/>
  41.     </div>
  42.  
  43. </form>

Чанк с шаблоном уведомления о новом сообщении ContactTpl содержит следующий код:

  1. Сообщение от [[+name]] ([[+email]]) было отправлено через форму обратной связи:
  2. <br/>
  3. [[+message:nl2br]]

Чанк с шаблоном уведомления пользователю о том, что он оставил сообщение ConfirmationTpl:

  1. <p>
  2.   Здравствуйте, [[+name]],<br/>
  3.   Мы получили Ваше сообщение и постараемся ответить как можно быстрее.
  4. </p>
  5. <p>
  6.   Ваше сообщение:<br/>
  7.   [[+message:nl2br]]
  8. </p>

Теперь переходим к сниппету emailUser:

  1. <?php
  2. //настройки
  3. $mailFrom = $modx->getOption('emailsender'); //от кого;
  4. $mailFromName = $modx->getOption('site_name'); //название сайта;
  5. $mailSender = $modx->getOption('site_name'); //или имя отправителя;
  6. $mailSubject = 'Тема сообщения';
  7. $mailReplyTo = $mailFrom;
  8.  
  9. //эти данные передаются в чанк извне
  10. $confirmationFields['message'] = $scriptProperties['fields']['message'];
  11. $confirmationFields['name'] = $scriptProperties['fields']['name'];
  12.  
  13. //e-mail пользователя
  14. $mailTo= $scriptProperties['fields']['email'];
  15.  
  16. $message = $modx->getChunk('ConfirmationTpl', $confirmationFields);
  17.  
  18. $modx->getService('mail', 'mail.modPHPMailer');
  19. $modx->mail->set(modMail::MAIL_BODY,$message);
  20. $modx->mail->set(modMail::MAIL_FROM,$mailFrom);
  21. $modx->mail->set(modMail::MAIL_FROM_NAME,$mailFromName);
  22. $modx->mail->set(modMail::MAIL_SENDER,$mailSender);
  23. $modx->mail->set(modMail::MAIL_SUBJECT,$mailSubject);
  24. $modx->mail->address('to',$mailTo);
  25. $modx->mail->address('reply-to',$mailReplyTo);
  26. $modx->mail->setHTML(true);
  27. if (!$modx->mail->send()) {
  28.     $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$err);
  29. return false;
  30. }
  31. $modx->mail->reset();
  32. return true;

В сниппете Вы можете изменить данные отправки e-mail. Снипет подставляет данные в чанки и отправляет уведомление на почту.
Вот и все, задача выполнена, надеюсь пост будет полезным для Вас.

Запись опубликована в рубрике MODX Revolution с метками . Добавьте в закладки постоянную ссылку.

3 комментария: MODx Revo Отправка подтверждения по почте в FormIt

  1. Дима говорит:

    У меня ошибка при отправке:
    Произошла ошибка при попытке отправить почту. Could not instantiate mail function.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">