Powermail - Datumsfeld im Formular vorbelegen

 

1. Powermail patchen

In verschiedensten Quellen/Foren/Newsbeiträgen wird festgestellt, dass man Datumsfelder bei powermail nicht vorbelegen kann - jüngstens fand ich bei typo3.net die Aussage, dass das "Datumsfeld ... aktuell komplett umgebaut" wird.

Nun nützt mir das aber wenig - wenn ich diese Funktionalität grade brauche. Also habe ich mir die Datei pi1/class.tx_powermail_html.php angesehen und mittels t3lib::devLog(...) analysiert. Siehe da: der "prefill"-Eintrag wird in der Funktion setGlobalMarkers() zwar verarbeitet, aber beim Datumsfeld in der Funktion html_date() nicht beachtet.

Setze ich nun die 3 Zeilen der prefill-Konfiguration wie im folgenden Patch nochmal im Bereich "wenn date2cal installiert ist ..." ein, dann wird die Vorbelegung wie erwartet ausgeführt.

Der Patch gilt für Powermail in der Version 1.5.6.

Patch für prefill bei powermail date field
  1. diff -uNr pi1/class.tx_powermail_html.php.org pi1/class.tx_powermail_html.php
  2. --- pi1/class.tx_powermail_html.php.org 2010-11-29 17:15:32.000000000 +0100
  3. +++ pi1/class.tx_powermail_html.php 2010-12-06 16:36:49.288744730 +0100
  4. @@ -724,6 +724,10 @@
  5. if (isset($this->piVarsFromSession['uid' . $this->uid]))
  6. $value = $this->div->nl2nl2($this->piVarsFromSession['uid' . $this->uid]);
  7. + if (!empty($this->conf['prefill.']['uid' . $this->uid])) { // 4. prefilling with typoscript for current field enabled
  8. + $value= $this->cObj->cObjGetSingle($this->conf['prefill.']['uid' . $this->uid], $this->conf['prefill.']['uid' . $this->uid . '.']) . '" '; // add typoscript value
  9. + }
  10. +
  11. // init jscalendar class
  12. $JSCalendar = JSCalendar::getInstance();
  13. $JSCalendar->setConfigOption('ifFormat', $this->conf['format.']['date']);
  14.  

2. Datumsbelegung mit TypoScript konfigurieren

In meinem Beispiel habe ich die Datumsfelder "Beginn" (uid8) und "Ende" (uid9).

Das erste Feld soll beim Formularausfüllen auf den morgigen Tag, das zweite auf "morgen + 30 Tage" gesetzt werden. Eine Anregung für die Berechnung habe ich z.B. hier gefunden.

Also wird uid8.data (nicht .value !!) mit einem Timestamp vorbelegt, der "heute + 24h" entspricht. uid9.data erhält dann entsprechend "heute + 31 * 24h".

 

 

Powermail Setup - Datum vorbelegen
   1: plugin.tx_powermail_pi1 {
   2: 
   3: prefill {
   4:    # Beginn
   5:     uid8 = TEXT
   6:     uid8.data = date:U + (1*86400)
   7:     uid8.prioriCalc = 1
   8:     uid8.strftime = %d. %m. %Y
   9:    # Ende
  10:     uid9 = TEXT
  11:     uid9.data = date:U + (31*86400)
  12:     uid9.prioriCalc = 1
  13:     uid9.strftime = %d. %m. %Y
  14: 
  15: }
  16: }
  17: