Пример создания электронных форм на основе eForm

Для работы с электронными формами в MODx имеется мощное и удобное средство – сниппет eForm. Для создания простых форм на его основе не требуется особых знаний, да и более сложные формы вряд ли вызовут какие-то затруднения. Рассмотрим использование eForm для создания механизма отправления ссылки на страницу сайта произвольному получателю.

Подготовка к использованию eForm

Вначале следует в шаблон каждой страницы добавить ссылку на форму, которая заполняется при отправке письма. Допустим, что ID страницы с формой равен 55, тогда ссылка будет выглядеть примерно так:

<a href="[~55~]?furl=[~[*id*]~]">
	Пошлите ссылку на эту страницу другу</a> 

Для того, чтобы передать адрес страницы, с которой был осуществлен переход, используется параметр furl, при этом предполагается использование на сайте ЧПУ. Есть и другие способы определения адреса нужной страницы, но этот наиболее простой и надежный.

Чтобы передать нужный параметр в eForm, мы создадим небольшой сниппет, задав его вызов при наступлении события eFormOnBeforeFormMerge. Вот код сниппета, названного LinkToFriend:

<?php
function LinkToFriend ( &$fields ){
global $modx;
if (!array_key_exists($_REQUEST['furl'],
  $modx->documentListing))
  $_REQUEST['furl']='';
$fields['fullLinkToFriend']=
  $modx->config['site_url'].$_REQUEST['furl'];
$fields['linkToFriend'] = $_REQUEST['furl'];
return true;
}
?>

Если параметр furl не является адресом одной из страниц сайта, то он очищается, а далее в переменную fullLinkToFriend, которую в дальнейшем будет использовать eForm, записывается полный адрес нужной страницы, а в переменную linkToFriend – сокращенный адрес. Теперь мы готовы приступать к настройке eForm.

Настройка параметров eForm

На странице, где должна располагаться форма, следует поместить следующий код:

[!LinkToFriend!]
[!eForm? &sendirect=`1`
  &formid=`FriendForm`
  &report=`FriendFormReport`
  &thankyou=`FriendThank`
  &eFormOnBeforeFormMerge=`LinkToFriend`
  &tpl=`FriendForm`
  &subject=`Ссылка на интересную страницу`!]

Перед вызовом eForm мы вызываем описанный выше сниппет LinkToFriend, причем оба вызова не должны кэшироваться. Параметром eFormOnBeforeFormMerge сниппета eForm задается имя функции, которая должна выполняться перед формированием формы. Параметр subject задает поле темы отправляемого письма, formid задает имя формы, а установка в единицу значения параметра sendirect описывает, что письмо должно направляться по адресу, введенному в поле с именем email. Остальные три параметра задают имена чанков, необходимых для работы формы. Основной чанк с именем FriendForm выглядит примерно так:

<form method="post" action="[~[*id*]~]"
    id="FriendForm" name="FriendForm">
    <p><strong>*</strong>
    Поля обязательные для заполнения</p>
    <p class="error">[+validationmessage+]</p>
    <input name="formid" type="hidden" value="FriendForm" />
    <input name="furl" type="hidden"
      value="[+linkToFriend+]"
	  eform="Адрес ссылки::0::#EVAL return true;" /> 
    <input type="hidden" name="site_name"
	  value="[(site_name)]"
	  eform="Название сайта::0::#EVAL return true;" />
    <input type="hidden" name="site_url"
	  value="[(site_url)]"
	  eform="Адрес сайта::0::#EVAL return true;" />

    <label for="cfFriend">Имя вашего друга
	  <strong>*</strong>:<br />
    <input name="friend"
	  id="cfFriend" class="text" type="text"
	  eform="Имя вашего друга::1:" /></label><br />
 
    <label for="cfEmail">e-mail вашего друга
	  <strong>*</strong>:<br />
    <input name="email"
	  id="cfEmail" class="text" type="text"
	  eform="e-mail вашего друга:email:1" />
	  </label><br />

    <label for="cfName">Ваше имя
	  <strong>*</strong>:<br />
    <input name="name"
	  id="cfName" class="text" type="text"
	  eform="Ваше имя::1:" />
	  </label><br />
 
    <label for="cfSmail">Ваш e-mail
	  <strong>*</strong>:<br />
    <input name="smail"
	  id="cfSmail" class="text" type="text"
	  eform="Ваш e-mail:email:1" />
	  </label><br />
		
    <p>Адрес отсылаемой страницы сайта:
	[+fullLinkToFriend+]<br /><br /></p>
    <label for="cfMessage">Сообщение
      <strong>*</strong>:<br />
    <textarea name="message" rows="5" cols= "40"
	  id="cfMessage"
	  eform="Сообщение:html:1"></textarea>
      </label><br />

    <input type="submit" name="contact"
	  id="cfContact" class="button"
	  value="Отправить" /><br /><br />
</form>

Обратите внимание, что в начале чанка описаны несколько скрытых полей, в которых выводятся ссылка на страницу, полученная из сниппета LinkToFriend, название сайта и адрес главной страницы сайта. Именно так, через скрытые поля, можно передавать любые параметры, которые будут использоваться при формировании письма. Также обратите внимание на конструкцию #EVAL return true; в описании скрытых полей. В eForm может возникать ошибка проверки скрытых полей, и для ее устранения добавляется условие проверки, всегда возвращающее истинное значение. Остальная часть сообщения описывает поля, которые должны присутствовать в форме, причем в месте адреса страницы стоит конструкция [+fullLinkToFriend+], значение для которой определяется сниппетом LinkToFriend.

Чанк FriendFormReport описывает содержимое отправляемого электронного письма:

<p>Здравствуйте, <strong>[+friend+]</strong>.
    <br /><br />
[+name+] (<a href='mailto:[+smail+]'>
    [+smail+]</a>) отправил для вас следующее сообщение:<br /><br />
<em>[+message+]</em><br /><br />
Ссылка на страницу сайта:<br />
<a href="[+site_url+][+furl+]">
    [+site_url+][+furl+]</a><p>

Здесь нет ничего необычного, используются только переменные, определенные в описанной выше форме. Также следует описать чанк сообщения об успешной отправке письма, названный FriendThank:

<p>Ваше сообщение успешно отправлено</p>
<p>Чтобы вернуться на страницу,
ссылку на которую вы отправили,
щелкните мышью на 
<a href="[+site_url+][+furl+]">
этой ссылке</a></p>

После того, как все чанки и сниппеты введены, в шаблон добавлены нужные ссылки, а также создана страница с вызовом сниппетов, можно попробовать послать письмо с сайта на любой адрес, причем в письмо будет автоматически подставлена ссылка на просматриваемую страницу. Описанные приемы можно использовать и при создании других электронных форм. Создавая простые сниппеты, выполняемые при наступлении определенных событий, а также используя скрытые поля, можно реализовать достаточно сложные электронные формы.

Реклама

Партнеры

Поиск на сайте

Введите ваш запрос для начала поиска.