Sitecore - xslt呈现 - 在没有可用的已发布版本时隐藏

时间:2010-02-19 14:16:07

标签: .net xslt sitecore

现在,当我为Sitecore中由xslt渲染渲染的项目设置发布限制时,xslt将只输出在网站上看起来不太好的空块。

这是我用来渲染Sitecore项目的xslt代码:

      <xsl:for-each select="$item[sc:fld('__created',.)]">
    <xsl:for-each select="sc:Split('Agenda-items',$item)">
      <xsl:variable name="thisitem" select="sc:Split('Agenda-items',$item)" />
      <xsl:variable name="loopitem" select="sc:item(text(),.)" />
      <xsl:if test="$item[sc:fld('__created',.)]">

        <div class="agendaItem">
          <div class="agendaDatum">
            <span class="agendaDag">
              <sc:date field="Begindatum" format="dd" select="$loopitem" />
            </span>
            <span class="agendaMaand">
              <sc:date field="Begindatum" format="MMM" select="$loopitem" />
            </span>
          </div>
          <div class="agendaTekst">
            <sc:link select="$loopitem" title="" class="rood">
              <sc:text field="Titel" select="$loopitem" />
            </sc:link>
            <br />
            <span class="agendaUitleg">
              <xsl:value-of select="stringutil:Clip(sc:field('Intro',$loopitem), 60, 1)"/>&#160;
            </span>
          </div>
        </div>
      </xsl:if>
    </xsl:for-each>
  </xsl:for-each>

我想要的是检查一个项目是否具有上下文语言中可用的版本,该版本不限制在当前日期显示。例如:

这是2010年2月12日,我有一个项目,从2010年2月11日到2010年2月16日限制发布。现在它将不会显示,这是我想要的。但是,不是不显示我的跨度和div,它只会用空信息填充它们。这会导致网站上出现空块,这有点难看:

Empty :/ http://www.bibliotheekmb.nl/images/emptycellblocks.png

因此,此块的前一项显示了一个项目,但它被限制发布。我怎么能在xslt ??

中处理这个问题

Sitecore演示文稿xslt cookbook说:

<xsl:for-each select="$sc_currentitem/item[sc:fld('__created',.)]">
<!--the context element is an item with a version in the context language--> 
</xsl:for-each>

这是选择具有上下文语言版本的项目,但不能满足我的需求。

1 个答案:

答案 0 :(得分:3)

请记住,尽管所引用的项目未发布,但对它的引用仍将以guid的形式存在于“Agenda-items”字段中,因此当您拆分字段时,您将有四个项目要迭代但数据库中只有三个项目。

要确保仅列出数据库中存在的项目,请在测试时添加以下内容:

<xsl:for-each select="sc:Split('Agenda-items',$item)">
  <xsl:if test="sc:item(.,.) !=''">
    <xsl:variable name="thisitem" select="sc:Split('Agenda-items',$item)" />
    <xsl:variable name="loopitem" select="sc:item(text(),.)" />
    <!-- other processing -->
  <xsl:if>
</xsl:for-each>