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

 


Language: diff
diff -uNr pi1/class.tx_powermail_html.php.org pi1/class.tx_powermail_html.php
--- pi1/class.tx_powermail_html.php.org	20

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


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

 

Language: typoscript

plugin.tx_powermail_pi1 {

prefill {
   # Beginn
    uid8 = TEXT
    uid8.data = date:U + (1*86400)
    uid8.prioriCalc = 1
    uid8.strftime = %d. %m. %Y
   # Ende
    uid9 = TEXT
    uid9.data = date:U + (31*86400)
    uid9.prioriCalc = 1
    uid9.strftime = %d. %m. %Y

}
}

Powermail - Datumsfeld im Formular vorbelegen