在不同的Sitecore项目类型上显示不同。

| 让我们用我的具体例子来解释: 我有3种新闻(模板):新新闻,外部新闻,产品发布; 我想以不同的方式在主页上显示它们。 现在,我在xsl中做一个简单的事情:
<xsl:variable name=\"upcoming\" select=\"./item[sc:formatdate(sc:fld(\'End Date\',.),\'yyyyMMdd\') >= sc:formatdate($now,\'yyyyMMdd\')\" />
<xsl:for-each select=\"$upcoming\">
   <div>
       <h2>
          <sc:text field=\"Name\" />
       </h2>
       <p>
          <sc:text field=\"Description\" />
       </p>
   </div>
</xsl:for-each>
拳头解决方案将是这样的(显然我不知道真正的语法):
<xsl:choose>
  <xsl:when test=\"template = \'external news\'\">
      <!-- something -->
  </xsl:when>
</xsl:choose>
但更好的办法是采用一种更加面向对象的方法,并具有一个make_body()函数绑定到我可以从主页渲染中调用的项目。 还是Sitecore可以渲染可以显示在任何页面中的项目?由项目本身处理的渲染图? 你怎么看 ? 更新资料 我想我还不够清楚: 我要在主页上显示最后一个新闻框:
<div class=\"last_news\">
    <h2>Last News</h2>
    <!-- Loop Goes here -->
</div>
当我的不同新闻类型(新的,外部新闻,产品发布)显示在该框中时,它们的外观会有所不同: 新:
<div class=\"news\">
    <h2><!-- title --></h2>
    <p><!-- abridged text goes here --><p>
    <a href=\"##news url##\">read more</a>
</div>
外部新闻:
<div class=\"news external\">
    <img src=\"##website logo##\">
    <h2><!-- title --></h2>
    <p><!-- abridged text goes here --><p>
    <a href=\"##external url##\">read more on www.<!-- site name --></a>
</div>
产品发布:
<div class=\"news product_release\">
    <div class=\"float_left\">
        <img src=\"##product logo##\">
        <a href=\"##product url##\">Download now</a>
        <a href=\"##product download url##\">Download now</a>
    </div>
    <h2><!-- title --></h2>
    <p><!-- abridged text goes here --><p>
    <a href=\"##news url##\">read more</a>
</div>
每种新闻类型都有自己的模板,其中包含不同的字段 新增:标题,删节文本,全文 外部新闻:标题,删节文本,外部URL,网站选择框 产品发布:标题,删节文本,全文,产品选择框 我可以为每种类型制作一个子布局(.ascx)或渲染(.xslt),但是现在我想知道如何在循环中显示这些布局。 我可以在循环中放入一个占位符,Sitecore会知道当前项目必须使用占位符吗?     
已邀请:
也许我丢失了一些东西,但是您是否不能为每个模板绑定一个呈现(xslt)og sublayout(asp.net控件)呢? 而不是创建一个\“ complex \\”,或者切换为处理不同的模板,而是为每个模板简化一个? 例如。您将拥有以下asp.net控件: new.ascx external_news.ascx product_release.ascx 否则,如果您更喜欢使用1 xslt,因为它们有很多共享字段,则可以使用
<xsl:template match=\"*\">
功能。我认为您会这样写:
<xsl:template match=\"@template=\'external news\'\">
   //do something specific for the \'external news\' template
</xsl:template>
然后,您只需为每个模板制作一个。警告我不是100%确定@template = \'x \'是正确的语法。 我希望这有帮助。     
我认为答案完全取决于您要显示的内容。您可以将任何想要的内容放置在Rich文本字段中,并使它对于项是唯一的。到目前为止,这是最简单的解决方案,对我来说最有意义……但是也许我误会了您要做什么。但是我相当确定您不想在XSLT中执行此操作。 (当然,我有偏见...我在XSLT中什么都不做) 如果确实必须根据模板使渲染的行为不同,则可以将其设置为带有代码隐藏的子布局。将业务逻辑放入XSL只是没有意义。 也可以将子布局动态添加到占位符。毕竟,这是Sitecore在后端执行的操作...因此,您可以根据要显示的(随机?)项目指定特定的子布局,并将数据源设置为该项目。     

要回复问题请先登录注册