2012-03-26 5 views
2

Это первый раз, когда я когда-либо задавал вопрос, так что заранее извиняюсь, если я буду здесь.Счетчик XSL для определенного условия для SharePoint 2010 CQWP

Я пытаюсь собрать CQWP с функциональными возможностями слайдера jQuery. HTML, который я хочу вывести, должен быть в форме 2 UL. Первый с ликерами привязки li с # ассоциированным-ul-id

Вторые ul должны иметь идентификаторы, которые сопоставляются с элементами списка в первом. Например

<div id="tabs" class="news"> 
    <div class="news-pagination"> 
     <a href="#" id="carouseltext-prev">&laquo; Prev</a> 
     <ul id="carouseltext" class="horizontal-text order"> 
      <li><a href="#tabs-1">System</a></li> 
      <li><a href="#tabs-2">School</a></li> 
     </ul> 
     <a href="#" id="carouseltext-next">&raquo; Next</a> 
     <div class="clear">&nbsp;</div> 
    </div> 
    <ul id="tabs-1" class="feed order"> 
     <li>title 1</li> 
     <li>title 2</li> 
    </ul> 
    <ul id="tabs-2" class="feed order"> 
     <li>title 3</li> 
    </ul> 
</div> 

оригинальный XML начинается в виде

Мой XSL проходит через XML дважды, чтобы заполнить 2-х Ul. В первый раз он просто добавляет новый элемент списка, когда переменные __begincolumn и __begingroup являются истинными. Я разделил функциональность здесь, чтобы просто вывести заголовок. Вот урезанная версия XSL

<xsl:template match="/"> 
     <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row" /> 
     <xsl:variable name="RowCount" select="count($Rows)" /> 
     <xsl:variable name="FirstRow" select="1" /> 
     <xsl:param name="ColNumber" select="1" /> 

     <xsl:for-each select="$Rows" > 
      <xsl:variable name="CurPosition" select="position()" /> 
     <xsl:variable name="BeginNewsItemsList1" select="string('&lt;ul id=&quot;tabs-')" /> 
     <xsl:variable name="BeginNewsItemsList2" select="string('&quot;class=&quot;feed order&quot;&gt;')" /> 
     <xsl:variable name="BeginNewsItemsList" select="concat($BeginNewsItemsList1, $ColNumber, $BeginNewsItemsList2)" /> 

     <xsl:if test="($CurPosition &gt;= $FirstRow and $CurPosition &lt;= $LastRow)"> 
      <xsl:variable name="StartNewGroup" select="@__begingroup = 'True'" /> 
      <xsl:variable name="StartNewColumn" select="@__begincolumn = 'True'" /> 
      <xsl:when test="$StartNewGroup and $StartNewColumn"> 
        <xsl:choose> 
       <xsl:when test="$CurPosition = $FirstRow"> 
        <xsl:value-of disable-output-escaping="yes" select="$BeginNewsItemsList" /> 
       </xsl:when> 
       <xsl:otherwise> 
        <!-- other instructions --> 
       </xsl:otherwise> 
       </xsl:choose> 
      </xsl:when> 
      <xsl:when test="$StartNewGroup"> 
       <xsl:call-template name="OuterTemplate.CallFooterTemplate"/> 
       <xsl:value-of disable-output-escaping="yes" select="concat($EndColumn, $BeginNewsItemsList)" /> 
      </xsl:when> 
      <xsl:otherwise> 
      </xsl:otherwise> 
      </xsl:if>   
     </xsl:for-each> 
    </xsl:template> 

<xsl:template name="OuterTemplate.Count"> 
    <xsl:param name="ColNumber" /> 
    <xsl:value-of select="$ColNumber + 1" /> 
</xsl:template> 

Для второго по-каждого цикла я с настройкой счетчика, так что я могу добавить номер в конце идентификатора для каждого нового списка ид проблемы = «tabs-1», id = «tabs-2» и т. д.

В теории я думаю, что я должен установить параметр вне моего цикла for-each, а затем в цикле вызвать шаблон, который получает значение параметра и увеличивает его Это. Это означало бы, что он будет увеличиваться только при вызове шаблона.

Я не могу использовать position() для этого, поскольку он не соответствует значениям, которые я хочу. Я попытался последовать за несколькими блогами о рекурсивном программировании с помощью xsl, но я не могу найти ничего, что сработает. Я уверен, что я просто пишу XSL неправильно, но у меня сейчас немного свалка мозга.

Если кто-нибудь может указать мне в правильном направлении, это было бы здорово. Огромное спасибо.

+0

Просто добавить, я знаю, что могу легко сделать это с помощью JQuery, но я Я пытаюсь свести скрипты на стороне клиента к минимуму. – Dee

+0

... и это XSL-версия 1.0 – Dee

+0

Непонятно, пытаетесь ли вы решить проблему jQuery или xsl) Если второй - просто укажите xsl) –

ответ

1

Вы не можете изменить значения переменных после объявления. Вы можете использовать их в выражениях и/или передавать как параметры. Таким образом, вы не можете использовать внешнюю переменную как счетчик явно. Один доступный трюк рекурсивный цикл, как:

 <?xml version="1.0"?> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="root"> 
     <HTML> 
      <BODY> 
       <xsl:call-template name="for"> 
        <xsl:with-param name="i" select="1"/> 
        <xsl:with-param name="n" select="5"/> 
       </xsl:call-template> 
      </BODY> 
     </HTML> 
    </xsl:template> 

<xsl:template name="for"> 
    <xsl:param name="i"/> 
    <xsl:param name="n"/> 
    <xsl:value-of select="$i"/> 
    <xsl:if test="$i &lt; $n"> 
     <xsl:text>, </xsl:text> 
     <xsl:call-template name="for"> 
      <xsl:with-param name="i" select="$i+1"/> 
      <xsl:with-param name="n" select="$n"/> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

результат: 1, 2, 3, 4, 5

+0

Спасибо Тимур.Это похоже на то, что я хочу сделать, но мне нужно просто увеличивать два разных условия (либо когда $ StartNewGroup и $ StartNewColumn являются true, а $ CurPosition = $ FirstRow или $ StartNewGroup = true). Поэтому мне нужно будет вызвать шаблон в условных операторах внутри цикла for-seach $ Rows, используя глобальный параметр. Вероятно, он будет называться каждые 10-20 строк, когда $ NewGroup истинна, поэтому он не сможет быть настроен в структуре типа 1-5. – Dee

+0

Похоже, что это может быть довольно сложной задачей, чтобы избежать использования jQuery, чтобы попытаться сохранить серверные возможности. Другой вариант - добавить числа к якорям и стороне клиента id с помощью jQuery, как только я сделаю все остальное с помощью XSL. Как вы думаете, это лучший способ сделать это? – Dee

+0

Какова ваша серверная технология? Почему вы так привязаны к xsl? –

Смежные вопросы