如果有URL参数,则显示单个条目,否则显示所有视频-Symphony CMS



我一直在研究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/

本质上你需要:

  1. 带有URL参数(例如"id")的页面
  2. 一个名为"视频"的数据源,它可以为主页获取所有视频
  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>
    

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

相关内容

  • 没有找到相关文章

最新更新