0

我一直在研究 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"and template match="videos/entry"。如果定义了 URL 参数(例如,我正在加载 website.com/parameter),我希望显示第一个模板,它会显示“参数”视频,如果没有定义参数,它将显示所有视频,即第二个模板。

我在解释事情时遇到了真正的问题,特别是当我不完全了解技术时,所以请原谅我写作中的任何白痴,如有必要,我很乐意解释更多。

4

1 回答 1

2

您是否已将 URL 参数添加到您的模板所针对的页面?您是否为单个视频和多个视频添加了一个数据源?然后,您需要使用页面上的 URL 参数来确定要使用的代码块。

我知道要习惯很多东西,但你会通过一些实验来掌握它,并且论坛上有很多很好的帮助:http ://www.getsymphony.com/discuss/

本教程正在做类似的事情,并且有很多解释:http: //designprojectx.com/tutorials/master-detail-views-in-symphony/

基本上你需要:

  1. 带有 URL 参数的页面(例如,“id”)
  2. 一个名为“videos”的数据源,用于获取主页的所有视频
  3. 一个名为“single-video”的数据源,它通过其“id”获取一个视频(看起来像{$id}在数据源过滤器框中)。如果未设置 'id',这将不返回任何结果。
  4. 您需要在页面中包含两个数据源
  5. 然后,在您的页面模板中,您需要检查 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>
    

我希望这有帮助。Symphony 需要一点时间来适应,但一旦你开始看到所有部分是如何组合在一起的,它就真的很有意义了。

于 2013-11-27T16:18:26.417 回答