Hallo Forum,
ich bin T3-beginner und komme irgendwie nicht ganz klar, wie eine userfunc in ein extension template eingebunden wird.
Mein Problem: ich möchte ein Datumsfeld in der fe_user über powermail im timestamp-format eintragen.
Dazu wollte ich das how-to von Alexander Kellner nutzen ( http://www.typo3forum.net/forum/powermail/36102-powermail-datum-timestamp-powermail_frontend-datum.html (Powermail: Datum als Timestamp, powermail_frontend Datum) ), komme aber nicht so wirklich klar damit.
Die mit dem powermail-Formular erfassten Daten werden einwandfrei in die fe_user geschrieben, in das Feld date_of_birth wird jedoch statt des Datums bzw. timestamps eine 0 eingetragen.
debug.output zeigt folgendes im FE:
powermail: Values from session: 13.11.1960
powermail: Email values (sender_mail )
mailcontent: <td class="powermail_all powermail_all_td" valign="top">13.11.1960</p></td>
mailcontent (plaintext) 13.11.1960
powermail: DB values: <uid23></uid23>
powermail: Extern DB-table entries: date_of_birth [blank]
Folgendes habe ich konfiguriert:
TS constants:
Code:
includeLibs.powermailTimestamp = fileadmin/templ_VA/php-sql/user_powermailTimestamp.php
..habe ich aber auch schon im setup gehabt und bringt gleiches (unbefriedigendes) Ergebnis
TS setup (aus o.g. how-to auf meine Werte angepasst )
Code:
# Registrierungs setup.ts
plugin.tx_powermail_pi1.debug.output = all
# Datum in timestamp in die db schreiben:
# http://www.typo3.net/forum/beitraege/thema/87564/
plugin.tx_powermail_pi1 {
mode {
dblog {
# nachfolgend ist die uid 23 des Datumsfeldes aus dem powermailformular (uid 144) zu verwenden:
uid23 = USER
uid23.userFunc = user_powermailTimestamp->preflight
uid23.userFunc.field = uid23
#nachfolgend ist die content-uid des powermail-Formulars (uid 144) einzutragen:
uid23.userFunc.formuid = 224
}
}
}
plugin.tx_powermail_pi1.dbEntry {
fe_users {
_enable = TEXT
_enable.value = 1
#######??funktioniert dies wirklich???#####
_ifUnique.username = update
# vorhandene Datensätze werden überschrieben, neue Datensätze werden angelegt
pid = TEXT
pid.value = 97
tstamp = TEXT
tstamp.data = date:U
crdate = TEXT
crdate.data = date:U
cruser_id = TEXT
cruser_id = 1000114
# ... verkürzt ...diverse Felder werden einwandfrei gelesen und in die db geschrieben
email = TEXT
email.data = TSFE:fe_user|sesData|powermail_224|uid24
date_of_birth= TEXT
date_of_birth.field = TSFE:fe_user|sesData|powermail_224|uid23
}
} php userFunc (aus o.g. how-to ohne Änderung )
PHP-Code:
<?php
class user_powermailhelp {
// Function preflight() will be used from typoscript
function preflight($content='', $conf=array()) {
#t3lib_div::debug($conf);
$value = $GLOBALS['TSFE']->fe_user->sesData['powermail_'.$conf['userFunc.']['formuid']][$conf['userFunc.']['field']];
return $this->getDate($value);
}
// Main getDate() changes a date in any format to an unix timestamp
function getDate($string, $default = 'now', $timestamp = 1) {
$error = 0; // no error at the beginning
$string = str_replace(array('-', '_', ':', '+', ','), '.', $string); // change 23-12-2009 -> 23.12.2009
if (method_exists('t3lib_div', 'trimExplode')) $dateParts = t3lib_div::trimExplode('.', $string, 1); else $dateParts = explode('.', $string); // split at .
if (count($dateParts) === 3) { // only if there are three parts
if (strlen($dateParts[0]) <= 2 && strlen($dateParts[1]) <= 2 && strlen($dateParts[2]) <= 2) { // xx.xx.xx
$string = strtotime($dateParts[2].'-'.$dateParts[1].'-'.$dateParts[0]); // change to timestamp
}
elseif (strlen($dateParts[0]) == 4 && strlen($dateParts[1]) <= 2 && strlen($dateParts[2]) <= 2) { // xxxx.xx.xx
$string = strtotime($dateParts[0].'-'.$dateParts[1].'-'.$dateParts[2]); // change to timestamp
}
elseif (strlen($dateParts[0]) <= 2 && strlen($dateParts[1]) <= 2 && strlen($dateParts[2]) == 4) { // xx.xx.xxxx
$string = strtotime($dateParts[2].'-'.$dateParts[1].'-'.$dateParts[0]); // change to timestamp
}
else { // error
$error = 1; // error
}
} else { // more than 3 parts - so error
$error = 1; // error
}
$string = date('Y-m-d', $string); // For default: change 1234567 -> 1.1.1979
if ($timestamp) $string = strtotime($string); // Change back 1.1.1979 -> 1234567
if ($error) $string = ($default == 'now' ? time() : $default); // show default value
return $string;
}
}
?>
Ich vermute, es liegt am TS setup, aber ich weiß nicht genau wie.
Kann mir da vielleicht irgendjemand aufs Pferd helfen?
Vielen Dank
Thomas
Lesezeichen