Template definieren

1
1
2
3
4
5
6
7
8

1 zeigt das aktuell selektierte Template Bilder. 2 zeigt die höchste Stufe des Templates, der Name des Templates: MeinTemplate. Unterhalb von MeinTemplate sehen Sie den Template Structure-Baum, eine hierarchiche Organisation der Templates und seiner Kinder.

Save Speichert die aktuellen Änderungen. Wichtig: Sie müssen auf jeder Ebene der Template Structure speichern.
Delete Löscht das aktuell ausgewählte Template und alle Unter-Ebenen der Template Structure. Wenn Sie aus Versehen einen Teil der Struktur gelöscht haben oder Ihr Datenmodell sich verändert hat, löschen Sie die gesamte Struktur, schließen den Template-Editor und speichern die Export-Definition erneut. Dann erzeugt easydb eine neue Struktur.
Move Verschiebt einen Teil der Struktur und alle Kinder zu einem neuen Vater. Der Vater muß per ID angegeben werden. Die ID je Blatt in dem Strukturbaum sehen Sie, wenn Sie mit der Maus auf einem Blatt stehen bleiben und 2 Sekunden warten. Nutzen Sie diese ID um das Ziel des aktuell selektierten Struktteils anzugeben. Nutzen Sie Move nach einem Upload.
Rename Damit können Sie ein Blatt der Struktur umbenennen. Diese Funktion sollte in der Regel nicht benötigt werden.
Download Nutzen Sie Download, um eine Sicherheitskopie Ihrer Struktur zu machen und um Strukturen zwischen easydbs wiederzuverwenden. Wir empfehlen die Struktur nur auf der obersten Ebene herunterzuladen und sie mit Upload auch wieder auf der obersten Ebene einzuhängen.
Upload Eine per Download gespeicherte Struktur kann unterhalb des aktuell selektierten Blattes eingehängt werden. Nach einem Upload müssen Sie sicherstellen, dass die Blätter wieder auf derselben Ebene erscheinen.

Auf der Ebene Bilder zeigt die Tabelle in 4 verfügbare Outputs an, sie haben immer die Form {Name des Outputs}, also ein String eingeschlossen von geschweiften Klammern. Diese Outputs verwendet Sie in 3, der eigentlichen Template-Definition. In unserem Beispiel wird in der 2. Zeile der Output {id} verwendet. Bei den Outputs handelt es sich um Objekte-Daten auf der jeweiligen Ebene. Im Falle von {id} ist das einfach das Feld id der Tabelle Bilder.

Unterhalb der Tabelle Bilder sehen Sie in der Template Structure verlinkte Tabellen und Unter-Strukturen. Dabei gibt es:

  • n-m Beziehungen, die eine Verbindung zwischen der Tabelle Bilder und einer anderen Tabelle herstellen. Beispielsweise gibt es die Tabelle Bild_Person, die über das Feld bildid die Verbindung herstellt, siehe 4.
  • n-m Beziehungen, die über die allgemein Link-Tabelle eadb_links entstehen, hier sind zum Beispiel Institution, Material und Material_Klarch zu sehen.
  • Pseudo-Strukturen die mit PATH: beginnen. Diese Struktur zeigt an, dass es in der übergeordneten Tabelle eine Thesaurus-Struktur gibt. Zum Beispiel ist die Tabelle Schlagwort in unserem Beispiel eine hierarchiche Tabelle und deshalb gibt es unterhalt dieser Tabelle die Pseudo-Struktur PATH:fk_father_id.Schlagwort (siehe 5. Dabei ist der String nach PATH: der Feld-Name des Feldes welches die Baum-Tabelle verknüpft und der nächste String ist der Name der Baum-Tabelle. Bei hierarchischen Thesauri ist die Baum-Tabelle gleich der übergeordneten Tabelle.

Alle untergeordneten Strukturen können im Template aufgerufen werden, in dem dort der Name der Tabelle oder Struktur mit geschweiften Klammern eingefügt wird. In unserem Beispiel in 3 haben wir die Tabelle 5 Schlagwort zwischen die XML-Tags <schlagworte> und </schlagworte> geschrieben.

Die Template Structure wird von oben nach unten durchlaufen und zwar jeweils bis in die tiefste Ebene. Es wird aber nur an den Stellen gerendert, wo eine Ebene mit geschweiften Klammern in den jeweilige Header, Main oder Footer-Bereich geschrieben wurde. Für jedes gefundene Objekt wird jeweils Main aufgerufen.

Wenn wir also 2 Bilder exportieren, wird wie folgt gerendert:

  1. MeinTemplate Header
  2. MeinTemplate Main
  3.   Bilder Header
  4.   Bilder Main für 1. Bild
  5.     Schlagwort Header
  6.     Schlagwort Main für 1. Schlagwort am 1. Bild
  7.     Schlagwort Main für 2. Schlagwort am 1. Bild
  8.     Schlagwort Main für 3. Schlagwort am 1. Bild
  9.     Schlagwort Footer
  10.   Bilder Main für 2. Bild
  11.     Schlagwort wird NICHT gerendert, das 2. Bild hat keine Schlagworte
  12.   Bilder Footer
  13. MeinTemplate Footer

Escaping XML oder CSV

Auf der obersten Ebene (hier: MeinTemplate) der Templete-Struture wird mit escape_type festgelegt, ob die Output in eine ".csv"-Datei oder ".xml"-Datei erfolgen soll und wie escapt wird. Für XML werden einige Zeichen (siehe unten) escapt. Für CSV wird nicht escapt, hier verwenden Sie im Top-Level Platzhalter, um eine CSV-Zeile zusammenzubauen.

CSV

Für CSV verwenden Sie bitte auf jeden Fall ,(Komma) als Separator. In aktuellen Browsern ist es nicht immer möglich ein Tabulator einzugeben. Das interne Escaping verwendet , als "delimiter" und " als "enclosure".

Folgende Ersetzungen werden durchgeführt (im gesamten Text):

Text Ersetzung
" ""
<CSV> ","
<CSV-FIRST> "
<CSV-LAST> "

Das CSV-Escaping und CSV[-FIRST|-LAST|] gibt es seit Version 4.0.140. Mit älteren Version ist es problematisch Wiederholgruppen in CSV aufzulösen.

XML

Für XML werden folgende Ersetzungen durchgeführt:

Text Ersetzung
& &amp;
< &lt;
> &gt;
" &quot;
&apos;

Beispiel

Auf der obersten Ebene wird der escape_type auf xml gesetzt.

Die Ebenen wurden wie folgt definiert:

MeinTemplate 2

Main

{Bilder}

Bilder 1

Header

<bilder>

Main

<bild>
    <id>{id}</id>
    <file-original>{bild.data.1}</file-original>
    <thumb>{bild.data.2}</thumb>
    <pool>{pool_id.name}</pool>
{PATH:pool_id.Pool}
    <schlagworte>
{Schlagwort}    </schlagworte>

{bild.image}
  </bild>

Footer:

</bilder>

PATH:pool_id.Pool 6

Header

<poolpath>

Main

<path>{name}</path>

Footer

</poolpath>

Schlagwort 5

Main

<schlagwort>
  {PATH:fk_father_id.Schlagwort}{name}
</schlagwort>

PATH:fk_father_id.Schlagwort 7

Main

{name} &gt;

Das Rendern geht den Baum von oben nach unten durch und sucht die Outputs und die Unter-Strukturen, welche in geschweiften Klammern angegeben sind. Auf jeder Stufe gibt es Outputs, die Sie in der Liste Available Outputs sehen und durchblättern können.

In den Available Outputs sind 1-n Beziehungen zu anderen Tabellen transparent aufgelöst und folgen der Notation {1-n-Link-Feld der Haupttabelle — Punkt — Feld in der Link-Tabelle}. Beispielsweise gibt der Output {pool_id.name} den Wert des Feld Name der Tabelle Pool aus, und zwar von dem Pool, welcher über das Feld pool_id der Tabelle Bilder verknüpft ist.

Unser komplettes Beispiel rendert XML wie folgt:

<bilder>
  <bild>
    <id>394931</id>
    <file-original>/original/0/23000/23682/d80faa099cd55f837dca45e894bc2134d9952799</file-original>
    <thumb>http://eas.4.0.mad.pf-berlin.de/eas/get/0/23000/23682/ff7c50b6fa5d3c6b1f8d59beb0668ec088f09c44</thumb>
    <pool>Sachkunde</pool>
<poolpath><path>Ägyptologie</path><path>Sachkunde</path></poolpath>
    <schlagworte>
      <schlagwort>
        Architektur &gt; Bauplan
      </schlagwort>
      <schlagwort>
        Ereignis &gt; Ausstellung
      </schlagwort>
    </schlagworte>
  </bild>
  <bild>
    <id>394930</id>
    <file-original>/original/0/24000/24099/db27c88c1b8bc28fbfae87115b73bde4a1536faa</file-original>
    <thumb>http://eas.4.0.mad.pf-berlin.de/eas/get/0/24000/24099/ce837468e1be583ef2450c9f4594dad17a3cb921</thumb>
    <pool>Ägyptologie</pool>
<poolpath><path>Ägyptologie</path></poolpath>
    <schlagworte>
    </schlagworte>
  </bild>
</bilder>

Beachten Sie Folgendes:

  • Der Pool ist auf zwei Arten ausgegeben, einmal benutzen wir {pool_id.name} und einmal {PATH:pool_id.Pool} > {name}. Im ersten Fall erhalten wir den Pool-Namen und im zweiten Fall den Pfad zu dem Pool-Namen ( wir haben hierarchische Pools in unserem Beispiel ).
  • Die URLs zu den Assets ( file-original und thumb ) sind über die Outputs {bild.data.1} und {bild.data.2} enstanden. Siehe 8 im Screenshot. Hier wurde einmal original und einmal 160 als Version der gewünschten URL ausgegeben. Bei mode haben wir einmal remote_uri_no_host ausgewählt und das andere mal remote_uri. Ersteres gibt die URL ohne den Host aus, letzteres den vollständige URL. Der dritte mögliche Mode ist copy file, damit wird die Datei in den Ordner des exportierten XML kopiert und kann dann von dort in das ZIP-des XML eingepackt werden.

Neben den in EAS_PRODUCE festgelegten Versionen gibt es die Option original um auf das Original-Asset zuzugreifen und seit Version 4.0.265 auch die Option root, mit der auf das Root-Asset zugegriffen werden kann.

PHP Render Erweiterung

Unterhalb von Header, Main und Footer gibt es noch einen Bereich PHP. Dieser kann genutzt werden, um eigene Outputs zu definieren und dafür auf dieser Struktur-Ebene existierende Outputs zu verwenden.

if ({row_i}%2==0) {
  {PHP_EXTRA_OUTPUT}="GERADE";
} else {
  {PHP_EXTRA_OUTPUT}="UNGERADE";
}

Mit diesem PHP wird {row_id} genutzt, um mit einer mathematischen Formel festzustellen, ob das Rendern gerade in einer ungeraden oder gerade Objekt-Zeile angelangt ist. Es wird der eigene Output {PHP_EXTRA_OUTPUT} gesetzt. Dieser lässt sich auf derselben Ebene im Main Bereich verwenden. Das PHP wird jeweils pro Rendern des Main-Bereichs neu berechnet.

Intern passiert Folgendes:

  • Zuerst werden alle bekannten Outputs 1:1 ersetzt. In unserem Fall {row_i} durch die Zeilennummer. Bitte beachten Sie, dass hier kein weiteres Escaping stattfindet, d.h. die Outputs sind XML escaped.
  • Danach werden alle eigenen Output-Namen durch eine interne PHP-Variable ersetzt, die mit geschweiften Klammern umschlossen sind, mit einem Buchstaben (a-z, A-Z) beginnen und dann nur (a-z, A-Z, 0-9 oder _) enthalten.
  • Am Ende werden im Main-Template diese eigenen Output-Namen gesucht und durch die Werte der internen PHP-Variablen ersetzt.

Sie können in dem PHP globale Variablen der Form $_SERVER[‘MY_GLOBAL_VARIABLE’] verwenden, um Werte zwischenzuspeichern.