17.03.2011, 18:54
Hallo Forum,
mein Problem: ich möchte über powermail ein Registrierungsformular einrichten und müsste hierüber ein Datumsfeld
in die db, Tabelle fe_user und zwar im timestamp-format eintragen.
Dazu wollte ich das how-to von Alexander Kellner nutzen, dem Entwickler von Powermail,
( http://www.typo3forum.net/forum/powermai...datum.html (Powermail: Datum als Timestamp, powermail_frontend Datum) ),
komme aber nicht so wirklich klar damit, obwohl ich es insgesamt sehr gut
finde und deshalb auch an dieser Stelle im Forum einbringen möchte.
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]
Soweit ich das verstehe wird also in die email (=mailcontent) das Datum noch übergeben und geht dann irgendwo verloren.
Im TS habe ich folgenden code konfiguriert (constants):
..habe ich aber auch schon im setup gehabt und bringt gleiches (unbefriedigendes) Ergebnis
TS setup (aus o.g. how-to auf meine UID-Werte angepasst )
Meine php userFunc (aus o.g. how-to ohne Änderung ) sieht wie folgt aus:
Ich kenne mich allerdings nicht so gut mit typoscript aus und denke, dass meiner setup-configuration im Feld date_of_birth etwas fehlt und deshalb das Ganze kränkelt. Ich weiß nur nicht, was da falsch sein könnte.
Kann mir jemand einen Tipp geben, wie ich herausfinden kann, an welcher Stelle das eingetragene Datum verlorengeht?
Wenn ich das wüßte, könnte ich vielleicht weiterkommen.
Vielen Dank im Voraus für Eure Hilfe
Thomas
mein Problem: ich möchte über powermail ein Registrierungsformular einrichten und müsste hierüber ein Datumsfeld
in die db, Tabelle fe_user und zwar im timestamp-format eintragen.
Dazu wollte ich das how-to von Alexander Kellner nutzen, dem Entwickler von Powermail,
( http://www.typo3forum.net/forum/powermai...datum.html (Powermail: Datum als Timestamp, powermail_frontend Datum) ),
komme aber nicht so wirklich klar damit, obwohl ich es insgesamt sehr gut
finde und deshalb auch an dieser Stelle im Forum einbringen möchte.
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]
Soweit ich das verstehe wird also in die email (=mailcontent) das Datum noch übergeben und geht dann irgendwo verloren.
Im TS habe ich folgenden code konfiguriert (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 UID-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
}
}
Meine php userFunc (aus o.g. how-to ohne Änderung ) sieht wie folgt aus:
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 kenne mich allerdings nicht so gut mit typoscript aus und denke, dass meiner setup-configuration im Feld date_of_birth etwas fehlt und deshalb das Ganze kränkelt. Ich weiß nur nicht, was da falsch sein könnte.
Kann mir jemand einen Tipp geben, wie ich herausfinden kann, an welcher Stelle das eingetragene Datum verlorengeht?
Wenn ich das wüßte, könnte ich vielleicht weiterkommen.
Vielen Dank im Voraus für Eure Hilfe
Thomas