In Extbase-Extensions XML Datein verarbeiten

Hin und wieder braucht man Daten aus XML Dateien. Ob nun von fremden Systemen oder TYPO3 intern, wie z.B. Flexformdaten aus Templavoila, mit der php Funktion simplexml kommt man schnell an Ziel.

Sofern man Flexformdaten nicht mit dem Prefix "settings" definiert, stehen diese einem nicht ohne weiteres im Controller zur Verfügung.  Gleiches gilt für Fremdextensions, hier hat man nicht die Möglichkeit einer Änderung, besonders beliebt: Templavoila;)

Immer wieder erreicht man den Punkt - egal ob die XML von TYPO3 oder anderen Systemen - die XML in einen string zu speichern. Nur das Auswerten der Daten bereitet Probleme.

Mit der php Funktion simplexml kann man relativ einfach in Extbase auf die XML Objekte zugreifen. Hier ein Beispiel anhand einer Templavoila Flexform.

Hinweis: die tt_content muss in diesem Beispiel auf ein Extbase Model gemappt sein!

Die XML Datei erreichen wir dann z.B. über:

$xmlFlex = $tt_contentRow->getTemplavoilaFlex();

Unsere Variable $xmlFlex hat dann beispielhaft den Inhalt:

<T3FlexForms>
    <data>
        <sheet index="sDEF">
            <language index="lDEF">
                <field index="field_title">
                    <value index="vDEF">My Titel</value>
                </field>
                <field index="field_description">
                    <value index="vDEF">My Description</value>
                </field>
                <field index="field_link">
                    <value index="vDEF">623</value>
                </field>
            </language>
        </sheet>
    </data>
</T3FlexForms>

Interessieren dürften uns vor allem die "value" Werte der "field index".

Mit der php Funktion simplexml_load_string Funktion (ab php 5.x) können wir uns schnellen Zugriff verschaffen:

$xml = simplexml_load_string($xmlFlex); 
$title  = strip_tags($xml->data->sheet->language->field[0]->value->asXML() );
$desc = strip_tags($xml->data->sheet->language->field[1]->value->asXML() );
$link  = strip_tags($xml->data->sheet->language->field[2]->value->asXML() );
 ...

Mit dem code

$xml->data->sheet->language->field[0]->value->asXML()

erreichen wir das jeweilige Titelfeld. Die [0] ist dabei eine fortlaufende Nummerierung der XML Titel Tags.

Mit dem umschließendem strip_tags entfernen wie das XML value Tag so das in unserer Variable nur der Inhalt enthalten ist.

Eine Ausgabe der Variablen für dieses Beispiel würde in Extbase die Werte:

My Titel
My Description
623

ergeben.

Weitere Artikel zu diesem Thema:

Empfehlenswerte Lektüre:

Think Content!

Für jeden, der auf seiner Webseite besseren Content anbieten will, sollte dieses Buch zum Standardrepertoire gehören. Auf über 600 Seiten beschreibt die Autorin ganz ohne Hype aber mit vielen Praxistipps, Listen und Infos den Weg von der Idee zum erfolgreichem Webcontent.

Kommentare

keine Kommentare vorhanden


Kommentar verfassen

Die Email Adresse wird nicht veröffentlicht.