Hallo Forum,
wenn man mit dem format.date-ViewHelper ein Unix-Timestamp z.B. in dd.mm.yy ausgeben will passiert folgendes:
Der Unix-Timestamp wird vorher in die UTC-Zeit "verschoben". Dies geschieht im contructor der DateTime-Klasse, die vom format.date-Viewhelper verwendet wird.
Konkretes Beispiel:
Ich schreibe per TYPO3-Backend in ein Datumsfeld einer Tabelle das Datum "01.10.2010". Dies steht als Unix-Timestamp dann inder mySQL-Tabelle.
Anschließend gebe ich in meiner Extension im fluid-Template das Datum mit dem Viewhelper format.date aus. Im Frontend erscheint nun der 30.09.2010 22:00.
Wie geht ihr mit Datumswerten und dem format.date-ViewHelper um? Übersehe ich eine einfache Lösung?
Ich habe das "Problem" so gelöst, daß ich einen eigenen ViewHelper in meiner Extension geschrieben habe, der die "alte" date-Funktion von php nutzt, um Unix-Timestamps zu formatieren. Diese Funktion verschiebt mir den Timestamp NICHT.
Hier meine Lösung:
class Tx_WrCompanydb_ViewHelpers_Format_TimestampViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
/**
* Formats a given timestamp to a given format (the format.date-Viewhelper converts Timestamps to UTC-Timezone - caused by the DateTime-Object-Constructor of PHP)
*
* @param int $ts The timestamp
* @param string $format The format
* @validate $ts IntegerValidator
* @return string The formated Date/Time
* @author Peter Rauber <peter.rauber@werkraum.net>
*/
public function render($ts, $format) {
return date($format, $ts);
}
}
Ich bin doch sicher nicht der einzigste, der es seltsam findet, daß man hierfür einen eigenen ViewHelper schreiben muss, oder?
Jetzt muss ich doch nochmal kurz nachhaken.
Habe mir ein Feld datum erstellt, konfiguriert im TCA wie folgt:
'datum' => array(
'exclude' => 0,
'label' => 'LLL:EXT:hk_chc_cm010/Resources/Private/Language/locallang_db.xml:tx_hkchccm010_domain_model_presse.datum',
'config' => array(
'type' => 'input',
'size' => 12,
'max' => 20,
'eval' => 'datetime,required',
'checkbox' => '0',
'default' => '0'
)
In der DB ist das Feld datum als int gespeichert (Timestamp)
Wenn ich versuche das eingegeben Datum im FE auszulesen bekomme ich folgende eigenartige Zahlen:
-99999./-99999./-99999.
Hättet ihr mir evt. einen Tipp, was ich falsch mache?!
Vielen Dank und lg
Kevin
Hallo Kevin,
in deinem Domain-Model steht sicherlich noch etwas wie:
class Tx_xxxxxxx_Domain_Model_xxx extends Tx_Extbase_DomainObject_AbstractEntity {
/**
* date
* @var Integer
*/
protected $date;
[...]
}
Die Annotation der Datumsvariablen steht hier noch auf @var Integer. Dies erzeugt der Extbase-Kickstarter in dieser Form für Datumsfelder. Leider, denn es muss nachträglich manuell auf:
@var DateTime geändert werden.
Dann wird auch vom format.date-Viewhelper dein Datum in deinem Fluid-Template korrekt ausgegeben:
<f:format.date format="d.m.y">{xxx.date}</f:format.date>
Viele Grüße,
Peter
smilecloud schrieb
Hallo Kevin,
in deinem Domain-Model steht sicherlich noch etwas wie:
class Tx_xxxxxxx_Domain_Model_xxx extends Tx_Extbase_DomainObject_AbstractEntity {
/**
* date
* @var Integer
*/
protected $date;
[...]
}
Guten Morgen Peter,
vielen Dank für deine Info.
An dem hat es auch gelegen.
Ich weiß, dass nächste passt hier nicht mehr rein....
Aber hast du schon mal versucht flexforms in Verbindung mit extbase und fluid zu verwenden?
Habe bisher verzweifelt nach etwas gesucht, wo und wie ich diese Flexforms Elemente ansprechen kann.
Vlt. hast du da ja auch noch einen Tipp *mal lieb guck* 🙂
Liebe Grüße und einen schönen Tag
Kevin
Hi Kevin,
ich mach das so:
ext_tables.php
$extensionName = t3lib_div::underscoredToUpperCamelCase($_EXTKEY);
Tx_Extbase_Utility_Extension::registerPlugin(
$_EXTKEY,
'Pi1',
'Mein Pluginname'
);
$pluginSignature_pi1 = strtolower($extensionName) . '_pi1';
// Flexform
$TCA['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature_pi1] = 'pi_flexform';
t3lib_extMgm::addPiFlexFormValue($pluginSignature_pi1, 'FILE:EXT:'.$_EXTKEY.'/Configuration/FlexForms/flexform_pi1.xml');
Configuration/FlexForms/flexform_pi1.xml
<T3DataStructure>
<meta>
<langDisable>1</langDisable>
</meta>
<sheets>
<main>
<ROOT>
<TCEforms>
<sheetTitle>LLL:EXT:meinextkey/Resources/Private/Language/locallang_flexform_pi2.xml:sheet_main</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<settings.limit>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:meinextkey/Resources/Private/Language/locallang_flexform_pi1.xml:sheet_main.limit</label>
<config>
<type>input</type>
<size>5</size>
<eval>int</eval>
<range>
<lower>1</lower>
<upper>1000</upper>
</range>
</config>
</TCEforms>
</settings.limit>
</el>
</ROOT>
</main>
</sheets>
</T3DataStructure>
Wichtig ist, die Felder mit "settings." als Prefix zu benennen. In obigem Beispiel also "settings.limit".
Ansprechen im Controller (der von dem Plugin pi1 aufgerufen wird)
$this->settings['limit']
Grüße,
Peter
Vielen Dank Peter,
dann werde ich das dann mal versuchen.
Wenn ich die Zugriffe im Controller festlege, kann ich die Flexform Elemente nachher für mein Fuid Template verwenden, hab ich das richtig verstanden?!?
lg
Kevin
Vielen Dank nochmal Peter,
hat alles bestens geklappt.
Ist ja echt super einfach mit extbase und fluid.
So macht die Programmierung von Extensions gleich doppelt Spaß 🙂
Hey Kevin,
klar, du kannst die Variablen aus dem Flexform im Controller an das Fluid-Template weiterreichen:
$this->view->assign('limit', $this->settings['limit']);
Jepp, seit Extbase & Fluid macht Extensionprogrammierung mehr Spaß und ist vor allem auch produktiver.
Grüße,
Peter