- Главная
- Документация
- eForm
- 92973
- Июль 2014
Сниппет eForm занимается обработкой данных, которые пользователи вводят в формы на сайте. Полученные данные можно отослать по электронной почте используя формат html, вложения, автоответчик, а также расширенную обработку данных и генерацию настраиваемых отчетов.
Вот некоторые из возможностей сниппета:
1. Форма проверки с помощью мощных правил проверки
2. Защита скрытых полей от взлома
3. CAPTCHA поддержка
4. Поддерживает HTML
5. Гибкая настройка
6. Уведомление для мобильных устройств
7. Автоматическое отправление почты
8. Поддержка CC и BCC полей
Обязательные параметры
Значение по умолчанию: нет
Примечание: Идентификатор формы используется при отправке данных. Этот параметр необходим если на странице используется более одной формы. Шаблон формы должен иметь скрытое поле с тем же идентификатором:
<input type="hidden" name="formid" value="formName" />или (начиная с eForm 1.4.x) можно установить идентификатор прямо в теге формы:
<form id="formName"...>
Пример:
&formid=`shopOrderForm`
Значение по умолчанию: нет
Примечание: Имя чанка или идентификатор документа (число) для используемого шаблона. Можно также использовать сниппет как источник шаблона. При этом никакие параметры не передаются. Для регулярных полей формы не нужно включать переменные, так как они автоматически включаются eForm, исключая случаи когда вы сами задаете значения.
Доступны плэйсхолдеры:
[+validationmessage+]
[+postdate+]
[+verimageurl+]
[+debugText+]
Пример:
&tpl=`OrderForm`
Значение по умолчанию: нет
Примечание: Имя чанка (не число) или идентификатор документа (число) для шаблона отчета. При использовании параметра &noemail этот параметр не требуется.
Пример:
&report=`OrderReport`
Остальные параметры
Значение по умолчанию: системный адрес
Примечание: Можно использовать несколько адресов разделяя их запятой (,). Если не указано, то будет использован системный адрес.
Пример:
&to=`mail_1@ваш-домен.ru,mail_2@ваш-домен.ru`
Значение по умолчанию: системный адрес
Примечание: Устанавливает адрес отправителя письма.
Пример:
&from=`mail@ваш-домен.ru`
Значение по умолчанию: site_name
Примечание:
Пример:
&fromname=`Администратор`
Значение по умолчанию: &to
Примечание: Электронный адрес или поле содержащее адрес, который будет использован вписьме для ответа.
Пример:
&replyto=`mail@ваш-домен.ru`
Значение по умолчанию: 0
Примечание: Включает возможность использовать поле формы для определения адреса, по которому будет послано письмо.
Пример:
&sendirect=`1`
Значение по умолчанию: пусто
Примечание:
Пример:
&cc=``
Значение по умолчанию: пусто
Примечание:
Пример:
&bcc=``
Значение по умолчанию: 0
Примечание: По умолчанию установлено в 0. eForm ищет адрес пользователя в поле с названием email.
Пример:
&ccsender=`1`
Значение по умолчанию: пусто
Примечание: Тема сообщения, которая может включать поля формы. Может включать ((поля формы)).
Пример:
&subject=`Спасибо за ваш заказ ((firstname)) ((lastname))`
Значение по умолчанию: 0
Примечание: 1 - отключить отправку писем
0 - включить отправку писем
Пример:
&noemail=`1`
Значение по умолчанию: пусто
Примечание: Устанавливает поле формы, которое будет использоваться при выборе единственного адреса из списка адресов разделенных запятой (,) для использования в параметре &to. Значения поля будет определять номер используемого почтового адреса. Номер 1 соответствует первому адресу и N - последнему. В форме используется поле topic в виде выпадающего списка. Когда пользователь выбирает значение, то тем самым он определяет один адрес, по которому будут посланы данные формы.
&to=`sales@me.com,support@me.com,billing@me.com` &mailselector=`topic`
Пример:
&mailselector=``
Значение по умолчанию: пусто
Примечание: Адрес почты мобильного устройства. Используется для отсылки короткого сообщения.
Пример:
&mobile=``
Значение по умолчанию: пусто
Примечание: Сообщение для отправки на мобильное устройство. Может содержать поля формы.
Пример:
&mobiletext=`Заказ для [+firstname+]`
Значение по умолчанию: пусто
Примечание: Имя чанка (не число) или идентификатор документа (число) дляи спользуемого шаблона сообщения выводимого пользователю после отправки данных формы.
Доступны плэйсхолдеры:
[+validationmessage+] [+postdate+] [+verimageurl+] [+debugText+]
Пример:
&thankyou=``
Значение по умолчанию: пусто
Примечание: Идентификатор документа на который будет совершен переход после отправкиданных формы. Смотрите также &thankyou.
Пример:
&gotoid=`34`
Значение по умолчанию: пусто
Примечание: Название или идентификатор категории используемый для категоризации eForm. Если категория не найдена, то она автоматически будет создана. Это используется в теме сообщения.
Пример:
&category=``
Значение по умолчанию: пусто
Примечание: Разделяемые запятой (,) ключевые слова или поле формы используемое при поиске банка данных.
Пример:
&keywords=`[+firstname+],[+lastname+], [+email+]`
Значение по умолчанию: пусто
Примечание: Адрес электронной почты, который показывается при отправке сообщения автоответчика.
Пример:
&autosender=`no-reply@mydomain.com`
Значение по умолчанию: пусто
Примечание: Имя, используемое в сообщении автоответчика.
Пример:
&autoSenderName=`name`
Значение по умолчанию: пусто
Примечание: Название чанка (не число) или идентификатор документа (число) для используемого шаблона в сообщении автоответчика. Может содержать поля формы.
Пример:
&automessage=`messageForm`
Значение по умолчанию: 0
Примечание: Включает использование пользователями HTML в сообщении. 1 - включено, 0 - выключено. Возможны XSS атаки, например если раззрешено в чанке thankyou.
Пример:
&allowhtml=`1`
Значение по умолчанию: english
Примечание: Устанавливает используемый язык сообщений и проверки. Название языков совпадает с MODX.
Пример:
&language=``
Значение по умолчанию: 0
Примечание: Включает код проверки. Шаблон должен содержать поле для проверки и плэйсхолдер [+vericode+].
Пример:
&vericode=`1`
Значение по умолчанию: 0
Примечание: Включает расширенные сообщения об ошибках в проверке формы. В основном для отладки #LIST и #SELECT. 1 - включено, 0 - выключено.
Пример:
&debug=`1`
Значение по умолчанию: пусто
Примечание: Определяет, какие сообщения будут использовать формат html.
1 - все сообщения
report, autotext, mobile - конкретные типы сообщений.
Пример:
&sendAsHtml=`report`
Значение по умолчанию: пусто
Примечание: Определяет, какие сообщения будут использовать текстовый формат.
1 - все сообщения
report, autotext, mobile - конкретные типы сообщений.
Пример:
&sendAsText=`report`
Значение по умолчанию: пусто
Примечание: Названия переменных сессии $_SESSION, разделенные запятой (,). Они будут добавлены в список значений полей перед отображением формы и могут быть использованы в качестве скрытых полей. Если вы используете этот параметр, то убедитесь, что вы не раскрываете важную информацию сессии (скрытые поля не защищают информацию!).
Так как eForm не выполняет самостоятельную обработку таких значений, то вам необходимо включить их в шаблон.
Пример:
[!eForm &sessionVars=`jobID` ... !]
Пример:
&sessionVars=``
Значение по умолчанию: 0
Примечание: Используется в комбинации с &sessionVars. Переменные сессии будут переписаны введенными в форму значениями. При установке значения 1 полученные в форме данные получают приоритет.
Пример:
&postOverides=`1`
Значение по умолчанию: 0
Примечание: При установке значения `1` будут посылаться сообщения на специальный электронный адрес если будет замечена попытка инъекции eForm (используйте умеренно).
Пример:
&reportAbuse=`1`
Значение по умолчанию: пусто
Примечание: Добавляет определение стиля в область <head> страницы, на которой располагается форма или сообщение для пользователя показываемое после отправки (только если параметр &thankyou установлен). Значения могут быть в виде идентификатора документа (число), имени чанка или ссылки на таблицу стилей (относительная или абсолютная). Можно использовать несколько значений разделяя их запятыми (,) (фактически можно комбинировать все три вида значений).
Пример:
[!eForm &cssStyle=`assets/site/forms.css,chunkName` ... !]Примечание. Чанки (и документы, если установлен идентификатор документа) могут использовать значения в форме:
[!eForm &cssStyle=`chunkName` ... !]
[!eForm &cssStyle=`http://mysite.com/assets/styles/forms.css` ... !]
1. как встроенный блок:
<style>: <style type="text/css">/*какие-то стили*/</style>2. как ссылка на таблицу стилей:
<link href="assets/site/forms.css" rel="stylesheet" type="text/css">3. как разделенный запятой (,) список ссылок на таблицы стилей:
assets/site/forms.css,assets/site/more.css,assets/site/gone_overboard.css
Пример:
&cssStyle=``
Значение по умолчанию: пусто
Примечание: Аналогично параметру cssStyle.
[!eForm &jScript=`assets/site/forms.js,chunkName` ... !]
[!eForm &jScript=`chunkName` ... !]
[!eForm &jScript=`http://mysite.com/assets/styles/forms.js` ... !]
Пример:
&jScript=``
Значение по умолчанию: 1
Примечание: Защита формы от повторной отправки с теми же данными. Отправка данных формы автоматически отключается после первой успешной попытки пока ключ формы является одним и тем же. Для этого используется переменная сеанса с md5 хэшем в качестве ключа. Какие поля используются для сравнения задается в параметре &protectSubmit. Возможные значения:
0 - выключено
1 - используются все поля `required`
Список полей - список используемых полей через запятую.
Чтобы гарантировать, что используются соответствующие поля для разных форм переменная сессии основана на &formid({formid}_hash).
Пример:
&protectSubmit=`0`
Значение по умолчанию: 0
Примечание: Устанавливает лимит времени (в минутах) между отправками данных формы. После первой успешной отправки данных запрещает отправку других данных наопределенное время. При использовании совместно с &protectSubmit этот параметр имеет приоритет, позволяя повторную отправку данных независимо от установки &protectSubmit (будет сброшена сессионная переменная). Как и &protectSubmit этот параметр использует сессионную переменную основанную на &formid.
Пример:
&submitLimit=`10`
Значение по умолчанию: пусто
Примечание: Название класса. Добавляет класс в определенные поля формы при проверке. Существующие классы будут сохранены.
Если вы уже определили класс для полей или меток (label) и получили неожиданные результаты, то проверьте порядок определения классов. &requiredClass устанавливается в начало любых классов, которые уже установлены.
Пример:
&requiredClass=``
Значение по умолчанию: пусто
Примечание: Название класса. Добавляет класс к неправильно заполненным полям формы, которые выявились при проверке. Существующие классы будут сохранены.
Пример:
&invalidClass=``
Значение по умолчанию: пусто
Примечание: Определяет имя сниппета. Сниппет будет выполнен перед всеми обработками eForm. Один параметр &formid, будет опущен для сниппета. Любые возвращенные значения из сниппета не будут учитываться. Это может быть использовано как альтернатива использования функций в документе. К сожалению eForm молча проигнорирует результат работы сниппета, так как &modx->runSnippet не возвращает никаких значений.
Пример:
&runSnippet=``
Значение по умолчанию: пусто
Примечание: Для тех кто хочет оставить другие версии eForm активными. Теперь вы можете сохранить все файлы eForm и соответственно установить &snipFolder. Например вы можете сохранить версию 1.4.4 в папку assets/snippets/eform/1.4.4 и установить параметр:
&snipFolder=`eform/1.4.4`К значению автоматически добавится путь 'assets/snippets/'. Не нужно использовать закрывающий слэш (/)!
Пример:
&snipFolder=`eform/1.4.4`
Значение по умолчанию: пусто
Примечание: Имя поля формы, которое содержит список имен файлов, разделенных запятыми. Эти файлы должны быть расположены в &attachmentFolder.
Пример:
&attachmentField=``
Значение по умолчанию: пусто
Примечание: Путь к папке (относительно MODX basepath), которая содержит файлы, указанные в &attachmentField. Не нужно использовать закрывающий слэш (/)!
Пример:
&attachmentPath=``
Значение по умолчанию: пусто
Примечание: Имя чанка или текст, используемый в качестве шаблона для ошибок. Доступные плейсхолдеры:
[+ef_message_text+]
[+ef_wrapper+]
Пример:
&errorTpl=``
Значение по умолчанию: пусто
Примечание: Имя чанка или текст, используемый в качестве шаблона для списка необходимых полей. Доступные плейсхолдеры:
[+ef_required_list+]
Пример:
&errorRequiredTpl=``
Значение по умолчанию: пусто
Примечание: Имя чанка или текст, используемый в качестве разделителя между двумя элементами в списке необходимых полей.
Пример:
&errorRequiredSeparator=`, `
События для PHP функций
Значение по умолчанию: пусто
Примечание: Определяет название функции. Эта функция будет запущена после того как форма будет проверена и перед отчетом и сообщением для пользователя, а также отправкой любых сообщений. Функции передаются следующие параметры: &$fields - массив полей и значений переменных.
Пример:
&eFormOnBeforeMailSent=``
Значение по умолчанию: пусто
Примечание: Определяет название функции. Эта функция будет запущена после обработки всех шаблонов и любое сообщение будет послано. Функции передаются следующие параметры: &$fields - массив полей и значений переменных.
Пример:
&eFormOnMailSent=``
Значение по умолчанию: пусто
Примечание: Определяет название функции. Эта функция будет запущена после загрузки шаблонов и определения идентификатора формы. Функции передаются следующие параметры:
&$fields - массив полей и значений переменных.
&$templates - массив всех шаблонов с индексами 'tpl','report','thankyou' и 'autotext'. Последние три будут иметь значение только после отправки формы.
Пример:
&eformOnBeforeFormParse=``
Значение по умолчанию: пусто
Примечание: Определяет название функции. Эта функция будет запущена только при показе форм и до определения всех переменных шаблона. Функции передаются следующие параметры: &$fields - массив полей и значений переменных.
Пример:
&eFormOnBeforeFormMerge=``
Значение по умолчанию: пусто
Примечание: Определяет название функции. Эта функция будет запущена после проверки данных формы. Это можно использовать для определения собственного алгоритма обработки. Функции передаются следующие параметры:
&$fields - массив полей и значений переменных &$vMsg - числовой массив ошибок проверки данных формы &$rMsg - числовой массив пропущенных обязательных полей &$rClass - ассоциативный массив имен полей и классов
Пример:
&eFormOnValidate=``
Для многих стандартных полей формы eFrom автоматически вставляет соответствующие переменные шаблона. Также вы можете определить их самостоятельно:
[+validationmessage+]
- Необходимо использовать в каком-то месте вашего шаблона или документа. С версии 1.4.2 эта переменная шаблона подверглась изменениям. Во-первых теперь ее не обязательно использовать в шаблоне. Теперь вы можете разместить ее в любом месте вашего документа. Во-вторых вам необязательно устанавливать какие-то тэги вокруг этой переменной. Теперь все html окружение включается в значение $_lang[\'ef_validation_message'] в языковом файле eForm.[+vericode+]
и[+verimageurl+]
- необходимы если вы собираетесь использовать в форме графическую проверку (capthca). Смотрите в примерах как это использовать.[+postdate+]
- эта переменная будет использована в отчете и сообщении для пользователя после отправки данных формы и установит текущую дату и время.[+debug+]
- начиная с версии 1.4.1, автоматически устанавливается, если включен режим отладки, в форме и сообщении для пользователя после отправки. Не помещается автоматически в шаблон отчета. Необходимо избегать отправку технической информации через сервер. Если вы хотите протестировать отправку писем, то можете включить эту переменную самостоятельно.
Формат данных
eForm имеет встроенный анализатор определяющий формат и тип данных с соответствующей проверкой каждого поля. Для настройки используется добавление дополнительного параметра eform в необходимые поля.
<input type="text" name="color" eform="A Color:string:1" />
Базовый вид параметра eform следующий:
[description/title]:[datatype]:[required]:[validation message]:[validation rule]
Типы данных
Вы можете устанавливать только эти типы данных. Другие определяются автоматически.
Все поля автоматически проверяют на пустоту значений.
- string - не имеет специальной проверки кроме пустоты и обязательности заполнения.
- date - проверяется на правильность формата даты (основано на функции strtotime())
- integer - проверяется на числовое значение (не проверяется, если оно целое)
- float - проверка на числовое значение
- email - проверяет правильность адреса email с использованием регулярных выражений
- file - (для поля загрузки файла) - проверяет соответствие разрешенному размеру, на текущий момент не имеет проверки типов файлов.
- html - также как тип string только перенос строки преобразуется в тэг <br />
Выпадающие списки, чекбоксы, и радиобатоны не требуют определения типа. eForm определяет их автоматически.
Эта версия поддерживает расширенную проверку на стороне сервера и фильтрацию, использующую очень гибкие правила проверки, которые включаются в параметр eform. Вы можете определить 2 дополнительных параметра проверки, сообщение об ошибке и проверке или правило фильтра.
Например:
eform="Year of Birth:integer:1:Must be between 1950 and 2002:#RANGE 1950-2002"
Правила проверки
#LIST - перечисленные через запятую возможные значения.
Например:
#LIST красный,зеленый,оранжевый,синий
#RANGE - разделенные запятой возможный числовые значения или числовые диапазоны. При установке диапазона порядок не имеет значения. 1~10 и 10~1 будут одинаково определять числа между 1 и 10 (включительно). Можно использовать как положительные так и отрицательные числа.
Например:
#RANGE 1,3,-5~-15,60~82
#SELECT - определяет правильность значений, которые будут возвращены из базы при запросе. Запрос должен возвращать значения только одной колонки (функция проверяет только первую колонку). Вы можете использовать {\DBASE} {\PREFIX} тэги. Они будут автоматически заменены на название базы MODx и используемый префикс таблицы.
Например:
#SELECT keyword FROM {\PREFIX}site_keywords
#EVAL - строка кода PHP. Может возвращать true или false. Внимание! Хотя #EVAL все еще используется в eForm 1.4, но в будущих версиях они скорее всего больше не будут поддерживаться. Взамен используйте #FUNCTION.
#FUNCTION - название функции. Функция должна использовать только одно значение (значение поля) и возвращать TRUE или FALSE. Смотрите примеры, чтобы разобраться как это действует.
Например:
#FUNCTION myValidationFunction
#REGEX - регулярное выражение. Синтаксис preg_match() в PHP.
Пример:
#REGEX /^[\a-z]+ [\a-z0-9_]+/i
#FILTER - фильтры не проверяют введенных значений, но заменяют слова и значения, которые соответствуют критериям. Вы можете использовать следующие фильтры:
- #FILTER #LIST
Используйте две вертикальные черты для разделения заменяемых и заменяющих слов.
Например:#FILTER #LIST badword,verybadword||goodword,verygoodword
- #FILTER #EVAL
Например:#FILTER #EVAL return myFilterFunction($value);
(естественно вы должны быть уверены в существовании указанной функции)
Примеры применения фильтра:function myFilterFunction($value){\
$badWords = array('scribble','coding');
$goodWords = array('design','sleep');
return str_replace($badWords,$goodWords,$value);
} - #FILTER #REGEX
Регулярное выражение замены. Синтаксис preg_replace() в PHP. Поиск и выражение замены разделяется двумя вертикальными чертами (||)
Поля select, radio и checkbox
Эти поля имеют автоматическу проверку. Все полученные значения проверяются на соответствие установленными вами в шаблоне формы. Это позволяет избежать добавления посторонних значений в эти поля.
Скрытые поля
По умолчанию скрытые поля присутствуют как защита от подделки формы при сравнении используемых значений (как в полях select, radio и checkbox). Но в некоторых местах это может быть ненужно. Например если вы используете обработку javascript, которая хранит свои значения в скрытых полях. В это случае вы можете изменить это поведение используя параметр eform (включая или выключая проверку).
Скрытое поле пример 1:
Встроенное поведение удобно, если вы храните в скрытом поле идентификатор документа и не хотите чтобы он был изменен кем-либо. Поле должно выглядеть примерно так:
<input type="hidden" name="docId" value="31" />
Скрытое поле пример 2:
Если вы используете javascript, который хранит значения в скрытых полях, то вам необходимо убрать проверку поля так:
<input type="hidden" name="calculatedField" value="" eform="::0::" />
Скрытое поле пример 3:
Пример похожий на 2, но вы хотите убедиться, что возвращенные значения лежат в допустимом диапазоне чисел. Установим для параметра eform заголовок, числовой тип данных, обязательность заполнения, сообщение об ошибке и проверку на диапазон. Это будет выглядеть так:
<input type="hidden" name="calculatedField" value="" eform="Calculated Value:integer:1:Calculation out of range:#RANGE 1-10" />
Пример полей с проверкой
Выпадающий список - обязательное поле (не требуется проверка)
<select name="mySelect" eform_options="Select Country::1" /> (тип данных не определен)
<option value="en-au">Australia</option>
<option value="en-us">USA</option>
</select>
Текстовое поле - обязательное поле и формат данных для дат.
<input type="text" name="dobDate" eform_options="Date of Birth:date:1:@EVAL return (strtotime($value)!==-1)?true:false;" />
Много чекбоксов - обязательное поле, можно выбрать несколько значений.
<input type="checkbox" name="myColors[]" value="Red" eform_options="Colors::1" /> (тип данных не определен)
<input type="checkbox" name="myColors[]" value="Green" /> (тип данных не определен)
Встроенная капча не дает надежной защиты от спама. Поэтому от нее имеет смысл или отказаться вообще в пользу других решений или использовать несколько методов борьбы со спамом одновременно. В данный момент популярно решение, используемое в кастомной сборке Дмитрия Лукьяненко. Суть метода - добавить в шаблон формы скрытое поле и сделать его незаполнение обязательным:
<input value="" name="special" class="special" type="text" eform="Спец:date:0" style="display:none;">
eForm в модальном окне
Ситуация, когда надо вывести форму в модальном окне довольно частая. Выведем форму в модальном окне Bootstrap 3.
Модальное окно будет выглядеть примерно так:
<button class="btn" data-toggle="modal" data-target="#myModal"></button>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Заголовок окна</h4>
</div>
<div id="myModal_form">
[!eForm? &formid=`Form` &tpl=`tplForm` &report=`tplReport` &thankyou=`tplThank` &subject=`Сообщение с сайта [(site_name)]`!]
</div>
</div>
</div>
</div>
Чанк tplForm:
<form method="post" action="[~[*id*]~]" name="Form" id="Form">
<div class="modal-body">
<input value="" name="special" class="special" type="text" eform="Спец:date:0" style="display:none;">
...
</div>
<div class="modal-footer">
<input type="submit" class="btn" name="submit" id="submit" value=" Отправить ">
</div>
</form>
Чанк tplThank:
<div class="modal-body">
Ваше сообщение отправлено.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
</div>
Ну и последний штрих, нужно разместить примерно такой скрипт:
<script>
$(function(){
$(document).on("submit","#Form",function(e){
e.preventDefault();
var m_method=$(this).attr('method');
var m_action=$(this).attr('action');
var m_data=$(this).serialize();
$.ajax({
type: m_method,
url: m_action,
data: m_data,
resetForm: 'true',
success: function(result){
var data = $(result).find("#myModal_form").html();
$("#myModal_form").html(data);
}
});
});
});
</script>