Динамический шаблон eForm в MODX Evo


Что делать, если нам нужна динамическая форма? Т.е. необходимо формировать форму “налету”.

eForm один из самых популярных сниппетов MODX. Он генерирует и отправляет формы в MODX Evo. Он прекрасно подходит для обратной связи, заявок, подписок и др.

Динамический шаблон eForm в MODX Evo

Что делать, если форма будет сгенерирована динамически при помощи Ditto, к примеру? Переменное количество полей, разные имена полей, исключение пустых полей из отчета. Что делать, если мы хотим, чтобы наша форма была динамической?

В MODX возможно почти все. Поэтому, спокойствие! eForm очень гибкий и его создатель и предполагал наши будущие потребности ;-) Вот почему в него включены события связанные с пользовательским PHP, который может содержать все, то угодно. Этим мы и воспользуемся.

Создадим собственную функцию

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

<?php
// by pm-fx.com
function populate_report( &$fields ){

$output = '<table border="1">';

foreach ($fields as $key => $value) {
// удалим пустые и ненужные поля из отчета
if($value!='' && $key!='postdate' && $key!='formid' && $key!='submit'){
$output .= '<tr valign="top"><td>'.$key.'</td><td>'.$value.'</td></tr>';
}
}

$output .= '</table>';

$fields['dynamicFields'] = $output;

return true;

}
?>

2. Параметры для eForm

Можно сказать, что сложная часть окончена. Сейчас мы запускаем наш сниппет eFormFunction в месте, где вызывается eForm .

[ ! eFormFunctions ! ]
[ ! eForm ! ]

В eForm должны быть ваши стандартные поля, которые я не стал приводить. Дополнительно к ним надо добавить параметр, который запустит нашу функцию перед отправкой формы. Этот параметр называется &eFormOnBeforeMailSent и в нашем случае это значение должно быть populate_report .

[ ! eFormFunctions ! ]
[ ! eForm? &eFormOnBeforeMailSent=`populate_report` ! ]

3. Шаблон отчета для отправки

Единственное значение, которое мы должны вставить в наш отчет для отправки &report будет такое:

[ + dynamicFields + ]

Готово. Теперь шаблон для отчета для отправки будет формироваться автоматически.

Источник http://pm-fx.com/en/blog/filling-eform-report-dynamically

05.02.2017 Эту страницу просмотрели за все время 4040 раз(а)


Twitter


Облако тегов