Je kunt binnen XSLT wel gebruik maken van variablen die van buiten af zijn ingesteld. Op basis daarvan zou je in XSLT-regel wel een ander alternatief kunnen kiezen. Maar dan is het de vraag hoe je dus van buiten af die variablen kan instellen als je alles client-side wilt doen.
voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
| ?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:param name="file" select="'default value'"/>
<xsl:template match="vraag">
<h3>Vraag</h3>
<p><xsl:value-of select="tekst"/></p>
<xsl:if test="url">
<p>
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:attribute name="title">Uitleg over deze vraag</xsl:attribute>
[img]"images/help24_h.bmp"[/img]
Uitleg
</xsl:element>
</p>
</xsl:if>
<xsl:apply-templates select="antwoorden"/>
<a href="index.html" title="terug noar huus">
[img]"images/home.bmp"[/img]
Home
</a>
</xsl:template>
<xsl:template match="antwoorden">
<h3>Antwoorden</h3>
<table border="0" width="90%">
<xsl:for-each select="antwoord">
<tr>
<td width="30">
<xsl:if test="url">
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:attribute name="title">Uitleg over dit antwoord</xsl:attribute>
[img]"images/help24_h.bmp"[/img]
</xsl:element>
</xsl:if>
</td>
<td>
<xsl:element name="a">
<xsl:attribute name="href">
controller?command=showboom&file=<xsl:value-of select="$file"/>
&antwoordid=<xsl:value-of select="@id"/></xsl:attribute>
<xsl:attribute name="title">Een antwoord op een vraag.</xsl:attribute>
<xsl:value-of select="tekst"/>
</xsl:element>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="antwoord">
<xsl:if test="conclusietekst">
<h3>Conclusie</h3>
<xsl:value-of select="conclusietekst"/>
</xsl:if>
<xsl:if test="vraag">
<h3>Volgende vraag</h3>
<p><xsl:value-of select="vraag/tekst"/></p>
<xsl:if test="vraag/url">
<p>
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="vraag/url"/></xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:attribute name="title">Uitleg over deze vraag</xsl:attribute>
[img]"images/help24_h.bmp"[/img]
Uitleg
</xsl:element>
</p>
</xsl:if>
<xsl:apply-templates select="vraag/antwoorden"/>
</xsl:if>
<p>
<xsl:element name="a">
<xsl:attribute name="href">controller?command=showboom&file=<xsl:value-of select="$file"/></xsl:attribute>
<xsl:attribute name="title">Ga terug naar de 1e vraag</xsl:attribute>
[img]"images/arrowup_blue24_h.bmp"[/img]
Terug naar de 1e vraag
</xsl:element>
</p>
</xsl:template>
</xsl:stylesheet> |
Op regel 6 staat dus een variable declaratie:
<xsl:param name="file" select="'default value'"/>
Die dus van buiten af ingesteld kan worden.
Mijn advies is trouwens om alle HTML van te voren te genereren en dat op je site te plaatsen. Dan ben je niet meer afhankelijk van de gebruiker of zijn browser wel geavanceerd genoeg is. Ik gebruik trouwens ANT om dit proces te automatiseren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <project name="Site" default="transform">
<property name="site" value="site"/>
<target name="transform">
<style in="menusystem.xml"
out="menusystem.html"
style="menusystem.xsl"/>
<copy file="menusystem.html"
todir="${site}"/>
</target>
</project> |
Nu hoef ik alleen nog maar in een console in te typen: ANT. En mijn site wordt gegenereerd. Super!
[edit]
ff de layout ontfucked.
[
Voor 166% gewijzigd door
Alarmnummer op 10-04-2004 12:56
]