Что делать, если нам нужна динамическая форма? Т.е. необходимо формировать форму “налету”.
eForm один из самых популярных сниппетов MODX. Он генерирует и отправляет формы в 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;
}
?>
Можно сказать, что сложная часть окончена. Сейчас мы запускаем наш сниппет eFormFunction
в месте, где вызывается eForm
.
[ ! eFormFunctions ! ]
[ ! eForm ! ]
В eForm
должны быть ваши стандартные поля, которые я не стал приводить. Дополнительно к ним надо добавить параметр, который запустит нашу функцию перед отправкой формы. Этот параметр называется &eFormOnBeforeMailSent
и в нашем случае это значение должно быть populate_report
.
[ ! eFormFunctions ! ]
[ ! eForm? &eFormOnBeforeMailSent=`populate_report` ! ]
Единственное значение, которое мы должны вставить в наш отчет для отправки &report
будет такое:
[ + dynamicFields + ]
Готово. Теперь шаблон для отчета для отправки будет формироваться автоматически.
Источник http://pm-fx.com/en/blog/filling-eform-report-dynamically