现在,当我为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)"/> 
</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>
这是选择具有上下文语言版本的项目,但不能满足我的需求。
答案 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>