Typo3 Formhandler: Einzelner value eines Array-Feldes in Admin-E-Mail

Samstag, 16. Februar 2013

Aufgabe: Ein Anmeldeformular entwickeln, bei dem mehrere Personen angegeben werden können. Damit das Formular übersichtlich bleibt, soll anfangs nur die Maske für eine einzelne Person angezeigt werden. Durch Klick auf “neue Person hinzufügen” sollen weitere Zeilen erscheinen. Und um es rund zu machen: In der Admin-E-Mail sollen die einzelnen Personen nicht per Komma getrennt erscheinen, sondern in schönen einzelnen Blöcken. Es erscheinen nur so viele Blöcke, wie Personen eingegeben wurden.

Für Suchmaschinen: Array Formhandler, array field value formhandler, access array field value, formhandler single field of array, einzelnes Feld aus verschachteltem Array, einzelnes formhandler value für mehrdimensionales array.

Formhandler Template

Ein schnelles Beispiel für den Teil, der ins TEMPLATE_FORM1 des formhandler-Templates könnte. Ein Container .personen enthält alle Einzelmasken für die eingegebenen Personen. Eine versteckte Variable formhandler[person][] wird einfach mit “1″ befüllt für jede eingefügte Person. Die restlichen Variablen werden in Arrays gepushed, z.B. formhandler[firstName][]

###selected_news|0_ja###

<div class="personen">
   <div class="person-item">
      <input type="hidden" value="1" name="formhandler[person][]" />
      <input type="text" value="" name="formhandler[firstName][]" />
      <input type="checkbox" value="ja" name="formhandler[news][]" />
 
      <a href="#" class="remove-person">Entfernen</a>
      <a href="#" class="add-person">Weitere Person</a>
 
   </div>
</div>
 
<script>
   $(function () {
 
      var person_div = $('.personen').html();
      $('.remove-person').hide();
      $('.add-person').click( add_person );
 
      function add_person () {
         $('.add-person').hide();
         var ref = $(person_div);
         ref.appendTo('.personen');
         ref.find('.remove-person').show().click( remove_person );
         ref.find('.add-person').show().click( add_person );
         return false;               
      }
 
      function remove_person() {
         $(this).closest('.person-item').remove();
         return false;
      }
 
   });
 
</script>

Der TEMPLATE_EMAIL_ADMIN_HTML-Teil

Das Pipe-Symbol ist das entscheidende Zeichen um an die Werte in verschachtelten, mehrdimensionalen Array zu kommen: ###value_firstName|0### liefert – in PHP gedacht – den Wert von firstName[0].

Das Ganze geht übrigens auch weiter in die Tiefe: ###value_mein|tiefes|array|0###

Sehr schön ist das Feature von Formhandler, bestimmte Subparts durch IF-Statements aus- oder einzublenden. Prinzip ist dabei: ###IF_person|0=1###

<!-- ###IF_person|0=1### -->
	1. Person: ###value_firstName|0###
<!-- ###IF_END### -->
 
<!-- ###IF_person|1=1### -->
	2. Person: ###value_firstName|1###
<!-- ###IF_END### -->
 
<!-- ###IF_person|2=1### -->
	3. Person: ###value_firstName|2###
<!-- ###IF_END### -->
 
<!-- ###IF_person|3=1### -->
	4. Person: ###value_firstName|3###
<!-- ###IF_END### -->

Array-Felder vorausfüllen bzw. nach Validierung Eingabewerte zeigen

kommt…