Seite 1 von 1

[Gelöst] Umwandlung XML -> Date

Verfasst: Do 19. Sep 2013, 10:38
von homtata
Hallo,

ich steh auf dem Schlauch. Ich habe aus der Datenbank einen Eintrag im XML-Format, der ein Datum repräsentiert, das ich über CMS_DATE eingegeben habe. In der Datenbank steht z.B.

Code: Alles auswählen

<?xml version="1.0" encoding="utf-8"?>
<date><timestamp><![CDATA[1380442920]]></timestamp><format><![CDATA[{"dateFormat":"d/F/Y","timeFormat":""}]]></format></date>
Nun muss ich das in ein valides Datum zurückwandeln und dachte: die Klasse cContentTypeDate kann ja angeblich rawsettings einlesen und umwandeln. Hm. Aber die bloße Neuinstanzierung, egal wie, bringt meine Seite schon zum Absturz, egal, was ich eingebe, hier ein paar Varianten:

Code: Alles auswählen

$thisdate  = new cContentTypeDate($databasevalue);
$thisdate  = new cContentTypeDate(5);
$thisdate  = new cContentTypeDate();
****** Edit:
20.09.2013: Lösung in einem Post weiter hinten.

Re: Brauche Hilfe: Umwandlung XML -> Date

Verfasst: Fr 20. Sep 2013, 13:25
von frederic.schneider_4fb
Du kannst die Klasse cContentTypeDate ja nur initialisieren, wenn auch die Klasse "cContentTypeAbstract" vollständig geladen werden konnte. Siehe Zeile 25 in der Datei "class.content.type.date.php". Ansonsten: Was sagt denn die Fehlerlog?

Re: Brauche Hilfe: Umwandlung XML -> Date

Verfasst: Fr 20. Sep 2013, 15:50
von Faar
homtata hat geschrieben:

Code: Alles auswählen

<?xml version="1.0" encoding="utf-8"?>
<date><timestamp><![CDATA[1380442920]]></timestamp><format><![CDATA[{"dateFormat":"d/F/Y","timeFormat":""}]]></format></date>
Nun muss ich das in ein valides Datum zurückwandeln
Du könntest selbst etwas mit simplexml zusammenbauen:
http://www.php.net/manual/de/simplexml. ... -basic.php

Dann nimmst du simplexml_load_string() ...
http://www.php.net/manual/de/function.s ... string.php
... und benützst als Libxml-Parameter das hier: LIBXML_NOCDATA
http://www.php.net/manual/de/libxml.constants.php

Damit müsste dann ein echo $xml->date[0]->timestamp; eigentlich bereits ein Ergebnis bringen.
Und wenn du mit dieser Methode beides hast, also Unix-Timestamp und DateFormat, kannst du mit den üblichen PHP-Datumsverarbeitungen das in eine ordentliche Ausgabe verwandeln.
Sollte fast gehen.

Re: Brauche Hilfe: Umwandlung XML -> Date

Verfasst: Fr 20. Sep 2013, 16:50
von homtata
Ich werde mich nochmal dransetzen. Eigentlich hatte ich ja gedacht, sowas geht recht easy, weil die ganze Chose ja auch verwendet wird für cms_date, und ich müsste jetzt nur sagen "nimm den XML-String und wandle den mit function xy um in ein Datum". Ich meld mich ;-)

Re: Brauche Hilfe: Umwandlung XML -> Date

Verfasst: Fr 20. Sep 2013, 18:22
von Faar
Im Prinzip geht das auch so leicht mit simple_xml.

In anderen Projekten (native, nicht CMS) hatte ich öfter mal XML Anfragen oder Rückgaben, nur bisher halt immer ohne CDATA.
Wenn es dann mal lief, war es wirklich so leicht wie beschrieben.

Und eine Funktion die das Datum formatiert, könnte dann die Ausgabe übernehmen.
Irgendwo hatte ich noch solche Funktionen rumliegen, weiß aber nicht mehr wo (müsste ich länger suchen).
Aber in php.net gibts auch Beschreibungen dafür.

Re: Brauche Hilfe: Umwandlung XML -> Date

Verfasst: Fr 20. Sep 2013, 23:01
von homtata
Lieber Faar,

herzlichsten Dank! Es hat dann zwar noch einige Versuche und Flüche gebraucht, aber nun hab ichs...

In der Datenbank landet wie oben schon geschrieben folgendes XML - es ist das im Feld "value" gespeicherte Gegenstück zu CMS_Date (= CMS-Typ 19):

Code: Alles auswählen

<?xml version="1.0" encoding="utf-8"?>
<date><timestamp><![CDATA[1380442920]]></timestamp><format><![CDATA[{"dateFormat":"d/F/Y","timeFormat":""}]]></format></date>
Das krieg ich dann umgewandelt mit folgenden Zeilen:

Code: Alles auswählen

$dom = new domDocument;
$dom->loadXML($db->f('value'));
$xml = simplexml_import_dom($dom);
$date_Ymd  = date('Y-m-d',  (int)$xml->timestamp);
Das ist mal ein schöner Wochenausklang...

LG
Viktor

Re: [Gelöst] Umwandlung XML -> Date

Verfasst: Sa 21. Sep 2013, 18:18
von Faar
Das sind angenehm wenig Zeilen und doch etwas anders als ich es kenne.
Freut mich dass es klappt, muss ich mir für später merken.

VG,
Frank

Re: [Gelöst] Umwandlung XML -> Date

Verfasst: Mo 23. Sep 2013, 10:11
von dominik.ziegler
Es würde auch so funktionieren:

Code: Alles auswählen

$date = new cContentTypeDate($art->getContent("DATE", 12), 12, array());
$dateData = $date->getConfiguration();
echo $dateData['date_timestamp'];
$art ist ein cApiArticleLanguage-Objekt und 12 der Content-Typ-Index von CMS_DATE.