...
v5.1
...
...
...
Mit dem Plugin mam/export wir dem Benutzer eine einfache Benutzeroberfläche angeboten, um Dateien, deren Feldwerte und die Ordnerstruktur aus dem MAM zu exportieren. Mam/export erweitert die Navigation um den Eintrag Export, über den die Benutzeroberfläche aufgerufen wird.
...
Zunächst muss mindestens ein Ordner gewählt werden, dessen Inhalte exportiert werden sollen (eine Mehrfachauswahl ist möglich).
...
Zum aktuellen Zeitpunkt ist XML das einzige unterstützte Ausgabeformat. Dieses besteht aus 5 Bereichen:
Bereich | Beschreibung |
---|---|
settings | Meta-Informationen zum Export-Zeitpunkt sowie dem Mandanten und der Domain der Dateien. |
languages | Der Index der vorhandenen Sprachen. Die Dateien verweisen jeweils über ein Attribut languageID auf einen der language-Nodes. |
folders | Der Index der Ordner-Struktur. Mittels Attribut id werde die Ordner indiziert und enthalten als Nodes die Felder mamFolder-Datensatzes. |
fields | Der Index der Felder mit den Feldern der Datensätze (mamFileField). |
files | Die eigentlichen Dateien mit sämtlichen Feldern des mamFile-Datensatzes. Der Knoten folderID verweist auf den Ordner aus dem Index. Sämtliche Feldwerte des mamFile-Datensatzes sind im Unterknoten fields aufgelistet. Diese sind über das Attribut id zum jeweiligen Feld des Index zugeordnet. |
Eine beispielhafte XML-Datei ist wie folgt aufgebaut:
Codeblock | ||||
---|---|---|---|---|
| ||||
<?xml version="1.0"?> <mamExport> <settings> <exportTime>1525333474</exportTime> <clientID>1</clientID> <domainID>1</domainID> </settings> <languages> <language id="1">de</language> <language id="2">en</language> </languages> <folders> <folder id="1"> <createTime>1525077772</createTime> <changeTime>1525077772</changeTime> <mamFolderPath> Zweiter-Testordner/Unterordner-des-Testordners/ </mamFolderPath> <mamFolderColor>#274e13</mamFolderColor> <mamFolderIsSystemFolder>0</mamFolderIsSystemFolder> </folder> <...> </folders> <fields> <field id="2"> <changeTime>1525080455</changeTime> <createTime>1525080455</createTime> <userID>1</userID> <mamFileFieldIdentifier> <value languageID="1">Test-Identifier</value> <value languageID="2">Test-Identifier</value> </mamFileFieldIdentifier> <mamFileFieldLabel> <value languageID="1">Test-Label</value> <value languageID="2">Test-Label</value> </mamFileFieldLabel> <mamFileFieldType>rte</mamFileFieldType> <mamFileFieldEntries> <value languageID="1"></value> <value languageID="2"></value> </mamFileFieldEntries> <mamFileFieldPredefined> <value languageID="1"></value> <value languageID="2"></value> </mamFileFieldPredefined> <mamFileFieldTooltip> <value languageID="1"></value> <value languageID="2"></value> </mamFileFieldTooltip> <mamFileFieldGroupChildFields> <value languageID="1"></value> <value languageID="2"></value> </mamFileFieldGroupChildFields> <mamFileFieldResultColumn>0</mamFileFieldResultColumn> <mamFileFieldSort>0</mamFileFieldSort> <mamFileFieldConstraint></mamFileFieldConstraint> <mamFileFieldRelation> <value languageID="1"></value> <value languageID="2"></value> </mamFileFieldRelation> <mamFileFieldFeatureForm> <value languageID="1"></value> <value languageID="2"></value> </mamFileFieldFeatureForm> </field> <...> </fields> <files> <file id="1"> <folderID>4</folderID> <createTime>1525078573</createTime> <changeTime>1525247400</changeTime> <userID>1</userID> <mamFilePath> Zweiter-Testordner/Unterordner-des-Testordners/sample-image-1.jpg </mamFilePath> <mamFileFileSize>5259440</mamFileFileSize> <mamFileResX>3648</mamFileResX> <mamFileResY>2432</mamFileResY> <mamFileMimeType>image/jpeg</mamFileMimeType> <mamStatus>0</mamStatus> <mamFileMetaData>image/jpeg</mamFileMetaData> <fields> <field id="2"> <value languageID="1">Der Wert des Feldes für Sprache 1</value> <value languageID="2">Der Wert des Feldes für Sprache 2</value> </field> <...> </fields> </file> <...> </files> </mamExport> |
...
Im Fall des fields-Knotens eines file-Knotens sieht die Struktur beispielhaft wie folgt aus:
Codeblock | ||||
---|---|---|---|---|
| ||||
'fields' => [ 'field' => [ [ '@id' => 1, 'value' => [ [ '@languageID' => '1', '#' => 'Wert für Sprache 1' ], [ '@languageID' => '2', '#' => 'Wert für Sprache 2' ] ] ], [ '@id' => 2, 'value' => [ [ '@languageID' => '1', '#' => 'Wert 2 für Sprache 1' ], [ '@languageID' => '2', '#' => 'Wert 2 für Sprache 2' ] ] ], ... ] ] |
Als XML serialisiert ergibt das folgende Ausgabe:
Codeblock | ||||
---|---|---|---|---|
| ||||
<fields> <field id=1> <value languageID="1">Wert für Sprache 1</value> <value languageID="2">Wert für Sprache 2</value> </field> <field id=2> <value languageID="1">Wert 2 für Sprache 1</value> <value languageID="2">Wert 2 für Sprache 2</value> </field> </fields> |
Grundsätzlich verwendet der Encoder assoziative Arrays, z.B. ['field' => 'value'] wird zu <field>value</field> serialisiert. Probleme gibt es hierbei, wenn mehrere field-Knoten nacheinander stehen sollen, da der Key in assoziativen Arrays immer eindeutig sein muss. Das Folgende Array ist daher nicht möglich: ['field' => 'value', 'field' => 'value2']. Um dies zu erzielen wird folgendes geschrieben: ['field' => ['value', 'value2']]. Um dem Knoten field ein Attribut id zu geben muss dieses mittels @attributsname angegeben werden (siehe im oberen XML-Beispiel field und value mit den Attributen id und languageID). Hierbei wird die Struktur dann schnell recht komplex und unübersichtlich. Die falsche Verwendung von nummerischen und assoziativen Arrays führt schnell zu einem völlig anderen Ergebnis in der XML-Ausgabe.
...
Symfony bietet weitere Encoder, die auch in Json und andere Formate kodieren können. Vor der Implementierung dieser Encoder muss aber die Normalisierung (besondern die Attribute mit # und @) angepasst werden. Eine Kodierung in json kann derzeit nicht ohne Weiteres vorgenommen werden.
Info |
---|
Weitere Informationen zur Symfony Serializer Komponente |
...