Группировка элементов в списке Sharepoint с помощью xsl 1.0 - PullRequest
0 голосов
/ 18 июня 2011

Это дополнительный вопрос к теме в /5112621/preodolenie-nezakrytyh-tegov-v-xsl

Это раскрывающееся меню, основанное на списке Sharepoint.Пункты меню могут быть добавлены в список случайным образом, и поле типа страницы / группировки страниц определяет их положение в меню.

Я не смог найти решение, предложенное в исходном вопросе, в котором использовались "рекурсивные братья и сестры"«чтобы работать, так что придумал обходной путь, который работает, но я уверен, что может использовать некоторую оптимизацию.

То, что я сейчас делаю, - это указание группы страниц, чтобы гарантировать, что подстраницы идут с правой родительской страницей.Недостатком является то, что я должен указать каждую группу страниц.Вопрос в том, как заставить xsl распознавать родительскую страницу (тип 1) и ее подстраницы (тип 2) программно, не указывая, какие они есть по отдельности?Элемент "linktitle" - это номер группы страниц, поэтому его нужно повторять для каждой страницы.

Я думаю, что я ищу что-то, что группирует каждый элемент с одинаковым номером группы страниц независимо от того, что это такое.И у меня есть доступ только к xsl 1.0.

XML

<Root>

<Schema>
<Field Type="Text" DisplayName="Page url" Required="FALSE" MaxLength="255"   Name="Page_x0020_url"/>
<Field Type="Text" DisplayName="Page title" Required="FALSE" MaxLength="255" Name="Page_x0020_title"/>
<Field ReadOnly="TRUE" Type="Computed" Name="LinkTitle" DisplayName="Page group number"/>
<Field Type="Text" DisplayName="Page number" Required="FALSE" MaxLength="255" Name="Page_x0020_number"/>

<Field Type="Choice" DisplayName="Page type" Required="FALSE" Format="RadioButtons" FillInChoice="FALSE" Name="Page_x0020_type">
<Default>2</Default>

<CHOICES>
<CHOICE>1</CHOICE>
<CHOICE>2</CHOICE>
</CHOICES>
</Field>
</Schema>

<Data ItemCount="1">
<Row Page_x0020_url="" Page_x0020_title="" LinkTitle="" Page_x0020_number="" Page_x0020_type=""/>
</Data>
</Root>

XSL

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" /> 
  <xsl:template match="/">

<!--  Render contents -->
<ul id ="navbar" class="">
<li>
 <xsl:for-each select="//Data/Row">
  <xsl:if test="./@LinkTitle = 1">
   <xsl:if test="./@Page_x0020_type = 1">
<a href="{./@Page_x0020_url}">         
<xsl:value-of select = "./@Page_x0020_title" />
</a>
     </xsl:if></xsl:if></xsl:for-each>
<ul>
<xsl:for-each select="//Data/Row">
 <xsl:sort select="./@Page_x0020_number" data-type="number"/>
  <xsl:if test="./@LinkTitle = 1">
   <xsl:if test="./@Page_x0020_type = 2">
<li>
<a href="{@Page_x0020_url}"> 
     <xsl:value-of select = "@Page_x0020_title" />
</a></li>
 </xsl:if></xsl:if></xsl:for-each>
</ul>
</li>
<!---REPEAT ABOVE FOR EACH PAGE GROUP-->
</ul>
</xsl:template>
 </xsl:stylesheet>G

1 Ответ

0 голосов
/ 21 июня 2011

Это возможно с помощью следующего «хака».Обратите внимание на незакрытый тег div ниже.

 <xsl:if test="@ID mod 2 = 0" > <xsl:text disable-output-escaping="yes"><![CDATA[<div>]]></xsl:text></xsl:if>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...