我一直在研究Symphony,尽管我学习速度很慢,但我已经创建了一些基本的网站。我正在努力解决的一件事是,如果有url参数,我希望我的主页模板(home.xsl)显示一个模板,如果该参数为空,则只显示另一个模板。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
omit-xml-declaration="yes"
encoding="UTF-8"
indent="yes" />
<xsl:template match="/">
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h2>Videos</h2>
<ul>
<xsl:apply-templates select="/data/videos/entry"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="videos/entry/single">
<div class="video"><xsl:value-of select="greeting-text"/></div>
</xsl:template>
<xsl:template match="videos/entry">
<li><xsl:value-of select="greeting-text"/></li>
</xsl:template>
</xsl:stylesheet>
例如,在上面的代码(改编自"Hello World!"Symphony教程)中,有一个template match="videos/entry/single"
和template match="videos/entry"
。如果定义了URL参数(例如,我正在加载website.com/parameter),我希望第一个模板显示出来,它会显示"参数"视频,如果没有定义参数,它将显示所有视频,即第二个模板。
我在解释事情时遇到了真正的问题,尤其是当我不完全了解这项技术时,所以请原谅我写作中的任何愚蠢行为,如果有必要,我很乐意解释更多。
您是否已将URL参数添加到模板所在的页面?您是否为单个视频添加了数据源,为多个视频添加了一个数据源?然后,您需要使用页面上的URL参数来确定要使用的代码块。
- 关于页面:http://www.getsymphony.com/learn/concepts/view/pages/
- 关于URL参数:http://www.getsymphony.com/learn/concepts/view/url-parameters/
- 关于数据源:http://www.getsymphony.com/learn/concepts/view/data-sources/
我知道这有很多需要习惯的地方,但你会通过一点实验来掌握它的窍门,论坛上有很多很棒的帮助:http://www.getsymphony.com/discuss/
本教程正在做类似的事情,并有很多解释:http://designprojectx.com/tutorials/master-detail-views-in-symphony/
本质上你需要:
- 带有URL参数(例如"id")的页面
- 一个名为"视频"的数据源,它可以为主页获取所有视频
- 一个名为"single video"的数据源,通过其"id"获取一个视频(看起来像数据源过滤器框中的
{$id}
)。如果未设置"id",则不会返回任何结果 - 您需要在页面中同时包含两个数据源
-
然后,在页面模板中,您需要检查URL参数以确定要使用的布局。这看起来像:
<xsl:template match="/"> <html> <head> <title>Homepage</title> </head> <body> <!-- this is the XSL version of an if/else (basically check if URL Parameter 'id' is nothing, display list, otherwise, display video by the 'id' provided) --> <xsl:when test="not($id)"> <h2>Videos</h2> <ul> <xsl:apply-templates select="/data/videos/entry"/> </ul> </xsl:when> <!-- here is where we tell it which template to use if we do have a video id in the URL. We reference the second datasource (single-video) in this case --> <xsl:otherwise> <xsl:apply-templates select="/data/single-video/entry"/> </xsl:otherwise> </body> </html> </xsl:template> <!-- single video layout --> <xsl:template match="single-video/entry"> <div class="video"><xsl:value-of select="greeting-text"/></div> </xsl:template> <!-- all videos layout --> <xsl:template match="videos/entry"> <li><xsl:value-of select="greeting-text"/></li> </xsl:template>
我希望这能有所帮助。交响乐需要一点时间来适应,但一旦你开始看到所有的作品是如何组合在一起的,它就真的很有意义了。