OrtwinPinke.de

Gedanken eines PHP-Entwicklers…

CONTENIDO 4.9: Erstellungsdatum des Artikels für deutsches Datumsformat ausgeben

Freitag 6. März 2015 von Ortwin Pinke

Möchte man in CONTENIDO 4.9 Artikel-bezogene Datumsangaben für den aktuellen Artikel im Modul abfragen und ausgeben, so geht das inzwischen recht einfach. “Ansprechpartner” ist in diesem Fall die Klasse ‘cApiArticelLanguage‘. Eine Instanz dieser Klasse für den aktuellen Artikel erhält man ganz einfach über die cRegistry-Klasse.

Datum des Artikels auslesen

<?php 
$oArtLang = cRegistry::getArticleLanguage(); 
echo $sDate = $oArtLang->get("created");
?>

Dieses ist die einfachste Form mit der Klasse zu arbeiten. Als Ausgabe erhalten wir das Erstellungsdatum des Artikels. Ändern wir “created” in “lastmodified” bekommen wir das Datum der letzten Änderung. Über die Klasse können wir noch auf viele weitere Felder direkt zugreifen, incl. dem Zugriff auf einzelne Artikel-Inhalte. Es lohnt sich hier einmal der Blick in den Core, da diese Klasse recht gut kommentiert ist.
Um nun mit der Variablen $sDate weiter arbeiten zu können nehmen Sie einfach das ‘echo’ davor weg, dieses dient nur zur besseren Veranschaulichung, wie auch im weiteren Verlauf dieses Artikels.

Kommen wir zum nächsten Teil…

Formatierung zur Ausgabe

Momentan sieht die Ausgabe so aus “2015-03-03 08:54:44″. Es handelt sich dabei schlichtweg um den aktuellen Feldeintrag im MySQL-DateTime-Format. Diesen wollen wir nun etwas auf hübschen um folgendes Ergebnis zu erhalten: “03. März 2015″.

Erster Schritt dazu ist die formatierte Ausgabe des DateTime-Strings mit Hilfe der PHP-Funktion strtotime(). Dazu ergänzen wir unseren Code wie folgt:

<?php 
$sDateFormat = '%d. %B %Y'; 
$oArtLang = cRegistry::getArticleLanguage(); 
echo $sDate = $oArtLang->get("created");
echo "<br />";
echo $sDateString = strftime($sDateFormat, strtotime($sDate));
?>

Als Ergebnis erhalten wir die Ausgabe: “03. March 2015″. Das sieht doch schon mal gut aus. Doch es fehlt noch die Übersetzung ins Deutsche bzw. in andere Sprachen.
PHP schlägt dazu vor, vor der Ausgabe mit strtotime per setlocale( int $category ,string $locale ) auf die entsprechende Sprache umzustellen, wobei $category für strtotime mit LC_TIME und $locale mit der entsprechenden Lokale (“de_DE”) zu ersetzen ist. Dieses funktioniert aber leider nur, wenn die entsprechende Lokale auch auf dem Server installiert ist, ansonsten liefert strtotime immer nur den englischen String zurück.

Daher nutzen wir um unsere Ausgabe beispielsweise in Deutsch anzeigen zu können im zweiten Schritt ein entsprechendes Array mit übersetzten Datum-Strings und der PHP-Funktion strtr(). Diese ersetzt alle in einem String vorkommenden Schlüssel (Keys) eines Arrays durch ihre Werte-Äquivalente (Values). Unser Code wird nun ein bisschen umfangreicher und sieht wie folgt aus:

<?php 
$sDateFormat = '%d. %B %Y'; 
$aDateLocale = array(     
    'Monday'    => 'Montag',
    'Tuesday'   => 'Dienstag',
    'Wednesday' => 'Mittwoch',
    'Thursday'  => 'Donnerstag',
    'Friday'    => 'Freitag',
    'Saturday'  => 'Samstag',
    'Sunday'    => 'Sonntag',
    'Mon'       => 'Mo',
    'Tue'       => 'Di',
    'Wed'       => 'Mi',
    'Thu'       => 'Do',
    'Fri'       => 'Fr',
    'Sat'       => 'Sa',
    'Sun'       => 'So',
    'January'   => 'Januar',
    'February'  => 'Februar',
    'March'     => 'März',
    'May'       => 'Mai',
    'June'      => 'Juni',
    'July'      => 'Juli',
    'October'   => 'Oktober',
    'December'  => 'Dezember'
);

$oArtLang = cRegistry::getArticleLanguage();
echo $sDate = $oArtLang->get("created");
echo "<br />";
echo $sDateString = strftime($sDateFormat, strtotime($sDate));
echo "<br />";
echo strtr($sDateString, $aDateLocale);
?>

Das sieht doch schon sehr ansprechend aus :-)
Was nun noch fehlt ist eine Möglichkeit diese Übersetzung auch für weitere Sprachen unserer CONTENIDO-Seite zu machen. Hier greifen wir einfach auf die eingebaute Übersetzungsfunktion des Modul-Bereiches unter CONTENIDO zurück und kapseln die Array-Values mit der CONTENIDO-Funktion mi18n(). Das sieht dann entsprechend so aus:

'Monday'    => mi18n("Montag")

Fertig! Wir können nun das Erstellungsdatum oder das Datum der letzten Änderung auch mit Texten formatiert und übersetzt ausgeben. Eine nützliche Funktionalität die man im Verlauf der Modul- oder Plugin-Programmierung für CONTENIDO 4.9 immer wieder mal gebrauchen kann.

Für mein CONTENIDO 4.9 Buch rund um Module bin ich immer auf der Suche nach solchen Tipps und Tricks. Falls ihr einen habt würde ich mich über eine entsprechende Mail freuen.

Oder ihr schaut einfach mal ins CONTENIDO-Forum herein, dort bin ich eigentlich regelmäßig unter dem Forennamen ‘Oldperl’ anzutreffen.
Und nun hoffe ich euch mit meinem Tipp geholfen zu haben und freue mich schon auf eure Kommentare.

Stimmen Sie ab:
1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5,00 out of 5)
Loading ... Loading ...

Dieser Beitrag wurde erstellt am Freitag 6. März 2015 um 14:28 und abgelegt unter Contenido. Kommentare zu diesen Eintrag im RSS 2.0 Feed. Sie können einen Kommentar schreiben, oder einen Trackback auf Ihrer Seite einrichten.

Kommentar schreiben