Выбор получателя в форме обратной связи Modx revo
Как на MODx сделать форму обратной связи с выбором получателя, причем так, что бы emailы не светились посетителям и роботам? Предлагаю следующий вариант:
Устанавливается дополнение FormIt. Создаем для формы обратной связи отдельный чанк. Назовём его FOS:
[[!FormIt?
&hooks=`groupSelector,recaptcha,spam,email,redirect`
&emailTpl=`sentEmailTpl`
&emailSubject=`Сообщение с anart.ru`
&emailTo=`[[+emailAddresses]]`
&emailFrom=`[[+contact_email]]`
&emailSubject = `Сообщение с сайта anart.ru`
&emailFromName = `anart.ru`
&validate=`contact_name:required,
contact_email:email:required,
contact_message:required:stripTags`
&redirectTo=`redirectTo`
]]
[[!+fi.error_message:notempty=`<p>[[!+fi.error_message]]</p>`]]
<form id="contactForm" method="post" action="[[~[[*id]]]]">
<input type="hidden" name="nospam:blank" value="" />
<div>
<label for="addressTo">Получатель </label><br />
<select style="width:250px;" name="service">
<option value="0">Информационная поддержка</option>
<option value="1">Администратор сайта</option>
<option value="2">Администратор сервиса</option>
</select>
</div>
<div>
<label for="contact_name">Ваше имя </label>
<span class="error">[[!+fi.error.contact_name]]</span><em>(обязательное поле, не менее 2 символов)</em><br />
<input style="width:250px;" id="contact_name" name="contact_name" size="30" minlength="2" value="[[!+fi.contact_name]]" />
</div>
<div>
<label for="contact_email">Ваш E-Mail для обратной связи</label>
<span class="error">[[!+fi.error.contact_email]]</span><em>(обязательное поле)</em><br />
<input style="width:250px;" id="contact_email" name="contact_email" size="30" value="[[!+fi.contact_email]]" />
</div>
<div>
<label for="contact_message">Текст сообщения</label>
<span class="error">[[!+fi.error.contact_message]]</span>
<em>(обязательное поле)</em><br />
<textarea id="contact_message" name="contact_message" cols="70" rows="7">[[!+fi.contact_message]]</textarea>
</div>
<div>
[[!+formit.recaptcha_html]]
[[!+fi.error.recaptcha]]
</div>
<div>
<input name="submit" type="submit" value="Отправить"/>
</div>
</form>
Здесь параметр redirectTo содержит ID страницы, где сказано, что сообщение отправлено
Созаем сниппет-хук groupSelector, который указан в хуках вызова formit и он будет хранить в себе emailы всех получателей:
<?php
$group = array(
'email1@host.zone',
'email2@host.zone',
'email3@host.zone'
);
// массив $group содержит email`ы в том же порядке,
// в котором объявлены options в html форме обратной связи.
$userChoice = $hook->getValue('service');
$hook->setValue('emailAddresses',$group[$userChoice]);
return true;
Создаем чанк sentEmailTpl для оформления отправляемого письма. Он указан при вызове formit выше:
<strong>Сообщение с сайта anart.ru</strong><br /><br />
<strong>Имя отправителя:</strong> [[+contact_name]]<br />
<strong>Текст сообщения:</strong><br />
[[+contact_message]]<br /><br />
<strong>E-mail отправителя:</strong> <a href="mailto:[[+contact_email]]">[[+contact_email]]</a>
Вы можете ответить отправителю, нажав <a href="mailto:[[+contact_email]]">сюда</a>