<title> per XSL generieren
Patrick
- xsl
Hallo Leser!
Ich möchte den Titel einer Seite per XSL generieren da ich für einen gewissen Seitentyp ein sogenanntes "Webcontnet-Template" habe. Dieses EINE Template wird für mehrere Seiten angewandt. Deswegen kann ich den Seitentitel nicht fix reinschreiben sondern muss ihn durch entsprechende XSL Befehle "dynamisch" generieren lassen.
######## Webcontent Template Start ##############
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
.
.
.
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Treehouse café - <xsl:call-template name="main"/>: <xsl:call-template name="sub"/></title>
.
.
.
</head>
</xsl:template>
.
.
.
<xsl:template name="main">
<xsl:if test="string(/data/nav/mainnav/@pageId)">
<xsl:value-of select="/data/nav/mainnav"/>
</xsl:if>
</xsl:template>
<xsl:template name="sub">
<xsl:for-each select="/data/submenu">
<xsl:value-of select="item"/>
</xsl:for-each>
</xsl:template>
######## Webcontent Template Ende##############
Mein Problem ist, dass nur immer dass erste Element von "main" (also der erste Hauptnavigationspunkt: Tree House Cafe) und dass erste Element von "sub" angezeigt wird (z.b. About the cafe/About the Library etc.)
in einer anderen Variante werden alle menüitems hintereinander in den Seitentitel geschrieben.
<xsl:template name="main">
<xsl:for-each select="/data/nav">
xsl:choose
<xsl:when test="string(./mainnav/@pageId)">
<xsl:value-of select="./mainnav"/>
</xsl:when>
xsl:otherwise
<xsl:value-of select="./mainnav"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
Ich komme nicht auf die richtige Lösung. Bitte um Hilfe!
http://www.treehousecafe.org/index.php?pageId=9
#####################XML Datei########################
Hi Patrick!
<xsl:template name="main">
<xsl:if test="string(/data/nav/mainnav/@pageId)">
<xsl:value-of select="/data/nav/mainnav"/>
</xsl:if>
</xsl:template>
bedeutet: wenn /data/nav/mainnav[1]/@pageId (die [1] wird von xsl automatisch angenommen) ein String ist, dann gib /data/nav/mainnav[1] aus.
=> Browser hat recht.
<xsl:template name="main">
<xsl:for-each select="/data/nav">
xsl:choose
<xsl:when test="string(./mainnav/@pageId)">
<xsl:value-of select="./mainnav"/>
</xsl:when>
xsl:otherwise
<xsl:value-of select="./mainnav"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
bedeutet: für jeden Knoten in (Knotenliste) /data/nav:
wenn dieses Knotens Subknoten ./mainnav[1]/@pageId ein string ist, dann gib den Subknoten ./mainnav[1] aus,
ansonsten gib den Subknoten ./mainnav[1] aus.
=> gibt also alle knoteninhalte der Gestalt /data/nav/mainnav[x]/. aus. => Browser hat wieder recht.
Womit du dich mal beschäftigen solltest, ist:
http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#param
http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#with_param
Grüsse, Richard
Hallo,
Ich möchte den Titel einer Seite per XSL generieren da ich für einen gewissen Seitentyp ein sogenanntes "Webcontnet-Template" habe. Dieses EINE Template wird für mehrere Seiten angewandt. Deswegen kann ich den Seitentitel nicht fix reinschreiben sondern muss ihn durch entsprechende XSL Befehle "dynamisch" generieren lassen.
Hier muss du einen Parameter definieren, und in deinem PHP-Skript dafür sorgen, dass er diesen Paramter befüllt:
$proc = new XSLTProcessor;
...
$proc->setParameter('', 'pageId', $Wert);
wobei du $Wert aus dem URL holst(index.php?pageId=9)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
<xsl:param name="pageId" />
Mein Problem ist, dass nur immer dass erste Element von "main" (also der erste Hauptnavigationspunkt: Tree House Cafe) und dass erste Element von "sub" angezeigt wird (z.b. About the cafe/About the Library etc.)
Hm, was sollte denn bei "sub" angezeigt werden?
Du willst einen bread-crumb-trail im Titel anzeigen? In etwas so?
Treehouse café - Hauptnavigationspunkt: Unternavigationspunkt
Aufgrund deines Beisiel-XMLs:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="pageId" />
<xsl:template match="/">
<html>
<head>
<title>Treehouse café - <xsl:call-template name="seitentitel" /></title>
</head>
</html>
</xsl:template>
<xsl:template name="seitentitel">
<xsl:param name="ID" select="$pageId"/>
<xsl:choose>
<xsl:when test="/data/nav/subnav/item[@pageId = $ID]">
<xsl:value-of select="/data/nav/subnav[item[@pageId = $ID]]/preceding-sibling::mainnav"/>: <xsl:value-of select="/data/nav/subnav/item[@pageId = $ID]"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="/data/nav/mainnav[@pageId = $ID]"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Das würde bei pageId=15: "Treehouse café - Tree House Cafe: Refurbishment info" und bei pageId=41: "Treehouse café - City of Bradford" produzieren.
Grüße
Thomas