-
Notifications
You must be signed in to change notification settings - Fork 6
XSLT Templates_fuer_Boxen_erstellen
XSLT-Templates für Boxmodule unterscheiden sich von den Templates für Seitenmodule in einigen Punkten:
- Boxmodule müssen das Seitenmodul page_main.xsl nicht importieren.
- Boxmodule importieren stattdessen das Basistemplate
./base/boxes.xsl
. - Die Seiten- und Boxtemplates werden unabhängig voneinander verarbeitet. Dabei wird die Ausgabe der Boxen in das Seiten-XML in CDATA-Abschnitten eingefügt.
- Da Boxen separat geparst werden und als CDATA-Abschnitte in das Seiten-XML eingefügt werden, genügt es, wenn Sie im Stylesheet für die Seitenmodule die XSLT-Anweisung
<xsl:value-of select="."/>
verwenden. Sie sollten dabei das Attributdisable-output-escaping
einfügen und auf den Wert „yes“ setzen, damit der XSLT-Prozessor den HTML-Code nicht maskiert ausgibt.
Die Stylesheet-Dateien für Boxmodule im Demo-Template sind wesentlich einfacher aufgebaut als die für Seitenmodule. Sie enthalten in der Regel ein bis zwei Templates. Im Folgenden soll anhand der Stylesheet-Datei für das Boxmodul „Extended Page Link“ kurz vorgestellt werden, wie Sie ein Template für ein Boxmodul anlegen. Dazu gehen Sie wie folgt vor:
-
Legen Sie im Verzeichnis
mein-Template/html/
die Stylesheet-Datei für das Boxmodul an. Für das Modul „Extended Page Link“ können Sie den Namenbox_pagelink.xsl
benutzen. Sie können natürlich auch eine andere Bezeichnung für diese Stylesheet-Datei wählen, sollten jedoch zumindest die Namenskonvention mit dem Präfixbox_
beibehalten. -
Erstellen Sie nun das XSLT-Grundgerüst: XSLT-Grundgerüst in der Stylesheet-Datei box_pagelink.xsl anlegen
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="extended_pagelink"> ... </xsl:template> </xsl:stylesheet>
Das einzige Template in diesem Stylesheet hat ein match-Attribut, dessen Suchmuster auf das oberste XML-Element der Boxausgabe passt.
-
Legen Sie nun das Template für das oberste XML-Element der Box an: Standard-Template für Boxen importieren
... <xsl:import href="./base/boxes.xsl"/> ...
Das zu importierende Stylesheet definiert alle notwendigen XSLT-Parameter.
-
Fügen Sie am Kopf der Stylesheet-Datei noch den Kommentarblock mit der Liste der vom Stylesheet unterstützten Module ein: Liste der vom Stylesheet unterstützten Module
... <!-- @papaya:modules actionbox_pagelink_extended --> ...
-
Schreiben Sie nun das Template mit dem
match
-Attribut aus: Template für das Modul „Extended Page Link“... <xsl:template match="extended_pagelink"> <xsl:apply-templates select="text-before/node()" /> <xsl:text> </xsl:text> <a href="{link/@href}"> <xsl:if test="popup"> <xsl:attribute name="onclick"> <xsl:text>return openPopup('</xsl:text> <xsl:value-of select="popup/@href" /> <xsl:text>', '</xsl:text> <xsl:value-of select="popup/@name" /> <xsl:text>', </xsl:text> <xsl:value-of select="popup/@width" /> <xsl:text>, </xsl:text> <xsl:value-of select="popup/@height" /> <xsl:text>, '</xsl:text> <xsl:value-of select="popup/@scrollbars" /> <xsl:text>', '</xsl:text> <xsl:value-of select="popup/@resizeable" /> <xsl:text>', '</xsl:text> <xsl:value-of select="popup/@toolbar" /> <xsl:text>'); return false;</xsl:text> </xsl:attribute> <xsl:attribute name="target">_blank</xsl:attribute> </xsl:if> <xsl:apply-templates select="link/node()" /> </a> <xsl:text> </xsl:text> <xsl:apply-templates select="text-after/node()" /> </xsl:template> ...
Das Template gibt den Text aus, der vor dem Link steht (
text-before/node()
.md), formatiert anschließend den Link selbst und gibt am Ende den Text aus, der nach dem Link folgt (text-after/node()
.md). -
Das vollständige Stylesheet sieht nun wie folgt aus: Vollständiges Stylesheet für das Boxmodul „Extended Page Link“
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- @papaya:modules actionbox_pagelink_extended --> <xsl:import href="./base/boxes.xsl" /> <xsl:template match="extended_pagelink"> <xsl:apply-templates select="text-before/node()" /> <xsl:text> </xsl:text> <a href="{link/@href}"> <xsl:if test="popup"> <xsl:attribute name="onclick"> <xsl:text>return openPopup('</xsl:text> <xsl:value-of select="popup/@href" /> <xsl:text>', '</xsl:text> <xsl:value-of select="popup/@name" /> <xsl:text>', </xsl:text> <xsl:value-of select="popup/@width" /> <xsl:text>, </xsl:text> <xsl:value-of select="popup/@height" /> <xsl:text>, '</xsl:text> <xsl:value-of select="popup/@scrollbars" /> <xsl:text>', '</xsl:text> <xsl:value-of select="popup/@resizeable" /> <xsl:text>', '</xsl:text> <xsl:value-of select="popup/@toolbar" /> <xsl:text>'); return false;</xsl:text> </xsl:attribute> <xsl:attribute name="target">_blank</xsl:attribute> </xsl:if> <xsl:apply-templates select="link/node()" /> </a> <xsl:text> </xsl:text> <xsl:apply-templates select="text-after/node()" /> </xsl:template> </xsl:stylesheet>