-
Notifications
You must be signed in to change notification settings - Fork 6
Inhalte_fuer_den_Fliesstext
Um die Inhalte des Artikels in das papaya-Formatierungsobjekt einzufügen, müssen Sie in der Regel ein XSLT-Template erstellen, dass an die Ausgabe des Seitenmoduls angepasst ist. Im Demo-Template für die PDF-Ausgabe ist ein Template für das Seitenmodul „Topic with image“ enthalten:
XSLT-Template für das Seitenmodul „Topic with image“
...
<xsl:template name="topic_default">
<xsl:param name="content"/>
<section page="default" page-break-before="yes">
<data>
<xsl:if test="$content/title">
<xsl:call-template name="title">
<xsl:with-param name="content" select="$content"/>
</xsl:call-template>
<br />
<br />
</xsl:if>
<xsl:if test="$content/image//img">
<xsl:apply-templates select="$content/image//img"/>
<br />
<br />
</xsl:if>
<xsl:if test="$content/subtitle">
<xsl:call-template name="subtitle">
<xsl:with-param name="content" select="$content"/>
</xsl:call-template>
<br />
<br />
</xsl:if>
<xsl:choose>
<xsl:when test="$content/text">
<xsl:call-template name="text">
<xsl:with-param name="content" select="$content"/>
</xsl:call-template>
<br />
<br />
</xsl:when>
<xsl:otherwise>
<xsl:if test="$content/teaser">
<xsl:call-template name="teaser">
<xsl:with-param name="content" select="$content"/>
</xsl:call-template>
<br />
<br />
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</data>
</section>
</xsl:template>
...
Das Template fügt die Inhalte in ein <section>
-Element ein. Das <section>
-Element wird über das Attribut page
mit der entsprechenden Layoutdefinition aus dem Layoutbereich verknüpft. Über das Attribut page-break-before="yes"
legen Sie fest, dass vor diesem Element ein Seitenumbruch durchgeführt wird. Dadurch beginnt der Artikel erst auf der zweiten Seite. Wenn Sie bei bestimmten Seitenmodulen mehr als ein <section>
-Element in das papaya-Formatierungsobjekt einfügen, wird vor jedem neuen Abschnitt ein Seitenumbruch eingefügt. Dadurch beginnen die neuen Kapitel auf einer neuen Seite.
Hilfstemplates für die Inhalte
Aus dem XSLT-Template topic_default werden weitere Hilfstemplates aufgerufen, die die entsprechenden Inhalte wie Titel, Untertitel, Bildreferenz, Artikeltext und optional auch den Teasertext einbinden. Alle diese Inhalte sind im Quelldokument in Elemente wie <title>
oder <text>
enthalten und können daher durch einfache value-of
-Anweisungen in das Zieldokument übernommen werden:
Hilfstemplates für Titel und Untertitel
...
<xsl:template name="title">
<b>
<xsl:param name="content"/>
<xsl:choose>
<xsl:when test="$content/title/text() != ''">
<xsl:value-of select="$content/title"
disable-output-escaping="yes"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$PAGE_TITLE"
disable-output-escaping="yes"/>
</xsl:otherwise>
</xsl:choose>
</b>
</xsl:template>
<xsl:template name="subtitle">
<xsl:param name="content"/>
<xsl:if test="$content/subtitle/text() != ''">
<xsl:value-of select="$content/subtitle"
disable-output-escaping="yes"/>
</xsl:if>
</xsl:template>
...
Elemente wie <text>
und <teaser>
können jedoch selbst weitere Elemente enthalten, die nicht so ohne weiteres in das Zieldokument übernommen werden können. Sie können sowohl Block-Level-Elemente wie <h1>
, <table>
, <ul>
oder <img>
enthalten oder Inline-Elemente wie <strong>
. Damit diese Elemente durch die XSLT-Templates mit entsprechenden match
-Muster bearbeitet werden können, wird die apply-templates
-Anweisung eingefügt. Näheres zu den XSLT-Templates für Block-Level- und Inline-Elemente erfahren Sie in Templates für Block-Level- und Inline-Elemente. Im folgenden Listing werden die Hilfstemplates für Text, Teaser und Bild dargestellt:
Hilfstemplates für Text, Teaser und Bild
...
<xsl:template name="text">
<xsl:param name="content"/>
<xsl:if test="($content/text/text() != '')
or (count($content/text/*) > 0)">
<xsl:apply-templates
select="$content/text/*|$content/text/text()"/>
</xsl:if>
</xsl:template>
<xsl:template name="teaser">
<xsl:param name="content"/>
<xsl:if test="($content/teaser/text() != '')
or (count($content/teaser/*) > 0)">
<xsl:apply-templates
select="$content/teaser/*|$content/teaser/text()"/>
</xsl:if>
</xsl:template>
<xsl:template name="image">
<xsl:param name="content"/>
<xsl:if test="$content/image//img/@src != ''">
<xsl:apply-templates select="$content/image//img"/>
</xsl:if>
</xsl:template>
...