Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Verständnisfrage zu powermail und userfunc, Datum als Timestamp
#1
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):

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('.'$string1); else $dateParts explode('.'$string); // split at .
        
            
if (count($dateParts) === 3) { // only if there are three parts
                
if (strlen($dateParts[0]) <= && strlen($dateParts[1]) <= && strlen($dateParts[2]) <= 2) { // xx.xx.xx
                    
$string strtotime($dateParts[2].'-'.$dateParts[1].'-'.$dateParts[0]); // change to timestamp
                
}
                elseif (
strlen($dateParts[0]) == && strlen($dateParts[1]) <= && strlen($dateParts[2]) <= 2) { // xxxx.xx.xx
                    
$string strtotime($dateParts[0].'-'.$dateParts[1].'-'.$dateParts[2]); // change to timestamp
                
}
                elseif (
strlen($dateParts[0]) <= && strlen($dateParts[1]) <= && 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
Zitieren
#2
Hallo Forum,

Thema zwischenzeitlich gelöst!


Vielleicht hilft es jemandem anderen:

Mit einem update auf powermail V 1.6.3 benötigt man übrigens keine userFunc mehr, da das Datumfeld der Session automatisch im timesstamp-Format zur Verfügung gestellt wird.


Gruss Thomas
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste