MODX - eForm automatyczne zapełnianie raportu

Co zrobić aby treść wysyłanego formularza zapełniła się dynamicznie?

Funkcja, którą zaraz przedstawię, okazała się ostatnio zbawieniem.

eForm to sztandarowy snippet odpowiedzialny za generowanie i wysyłanie formularzy w MODX Evo. Świetnie radzi sobie ze statycznymi formularzami jak te kontaktowe, rezerwacji itp.

Co jednak w sytuacji kiedy nasz formularz będzie generowany dynamicznie z udziałem np. Ditto. Raz będzie miał mniej a raz więcej pól. Czasem zmienią się ich nazwy, a czasem będziemy chcieli aby niewypełnione pola nie widniały w mejlu itd. Co zrobić aby treść wysyłanego formularza zapełniła się dynamicznie?

Na pewno nie załamywać się ;) w MODX możliwe jest prawie wszystko, a potwierdzeniem tego jest plastyczność eForm, którego twórca przewidział chęć wykorzystania eventów połączonych z wykonywaniem własnego kawałka PHP. Z tego właśnie skorzystamy.

1. Tworzymy własną funkcję

Na początek stworzymy snippet (o nazwie np. eFormFunkcje) zawierający funkcję, która przeskanuje wysyłany formularz, wyciągnie z niego nazwy pól wraz z ich wartościami, a na końcu stworzy nową zmienną, zawierającą całą dynamicznie wygenerowaną treść formularza. Tą zmienną zamieścimy jako placeholder w chunku będącym szablonem raportu.

<?php
function populate_report( &$fields ){
// by pm-fx.com
  $output = '<table border="1">';
  foreach ($fields as $key => $value) {
// remove empty and unnecesary fields from report
    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. Parametr eForm

Można powiedzieć, że najtrudniejsze za nami. Teraz w miejscu gdzie wywołujemy eForm powinniśmy wywołać również nasz nowy snippet, czyli eFormFunkcje:

[ ! eFormFunkcje ! ]
[ ! eForm ! ]

eForm powinien oczywiście zawierać swoje typowe parametry. Dodatkowo natomiast wrzucamy parametr odpowiedzialny na wykonanie naszej nowej funkcji przed wysłaniem wiadomości. Parametr nazywa się &eFormOnBeforeMailSent i w naszym przypadku jego wartość powinna wynosić populate_report.

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

3. Szablon raportu

W szablonie raportu zamieszczamy tylko [ + dynamicFields + ] i to wszystko. Od teraz nasz formularz będzie generowany dynamicznie :) Możliwe jest również rozwinięcie tej metody tak aby w czasie wykonywania funkcji pobierać nazwy dokumentów MODX o wskazanym id. "Po co?" zapytacie. A na przykład na potrzeby formularza zamówień produktów, ale o tym może innym razem :)

Tags: eform, kod, modx, php, snippet