Sitecore - рендеринг xslt - скрыть, когда опубликованная версия недоступна - PullRequest
2 голосов
/ 19 февраля 2010

Прямо сейчас, когда я устанавливаю ограничения на публикацию для элементов в Sitecore, которые визуализируются с помощью визуализации xslt, xslt будет просто выводить пустые блоки, которые на сайте выглядят не очень хорошо.

Это код xslt, который я использую для отображения элемента Sitecore:

      <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>

Я хочу проверить, есть ли у элемента версия, доступная на языке контекста, которая НЕ ограничена показом на текущую дату. Так, например:

Это 12 февраля 2010 года, и у меня есть статья, публикация которой запрещена с 11 февраля 2010 года по 16 февраля 2010 года. Сейчас она не будет показана, чего я и хочу. Но вместо того, чтобы не показывать мои пролеты и div, он просто заполнит их пустой информацией. Это приводит к пустым блокам на сайте, что довольно уродливо:

Пусто: / 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 Ответ

3 голосов
/ 19 февраля 2010

Помните, что хотя упомянутый элемент не опубликован, ссылка на него по-прежнему будет существовать в поле 'Элементы повестки дня' в форме guid, поэтому при разделении поля у вас будет четыре элемента для итераций. но только три элемента в базе данных.

Чтобы убедиться, что в списке присутствуют только те элементы, которые существуют в базе данных, добавьте следующее if test:

<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>
...