内容查询webpart itemstyle由XSLT中的组样式包装

时间:2011-07-17 07:47:51

标签: xslt sharepoint-2010

我有以下标记:

<ul id="slider">    
    <!-- slider item -->
    <li>
        ...
    </li>
    <!-- end of slider item -->
</ul>

我在header.xslitemStyle.xsl中定义了以下itemStyle和GroupStyle xsl,用于显示SharePoint 2010列表中的数据:

<!-- in header.xsl -->
<xsl:template name="Slider" match="*[@GroupStyle='Slider']" mode="header">
    <ul id="slider">
    </ul>
</xsl:template>

<!-- in itemStyle.xsl -->
<xsl:template name="Slider" match="Row[@Style='Slider']" mode="itemstyle">
    <xsl:variable name="SafeImageUrl">
        <xsl:call-template name="OuterTemplate.GetSafeStaticUrl">
            <xsl:with-param name="UrlColumnName" select="@Picture"/>
        </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="Title">
        <xsl:call-template name="OuterTemplate.GetTitle">
            <xsl:with-param name="Title" select="@Title" />
        </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="Details">
        <xsl:call-template name="OuterTemplate.GetTitle">
            <xsl:with-param name="Title" select="@Details" />
        </xsl:call-template>
    </xsl:variable>
    <li>
        <img src="{$SafeImageUrl}" alt="{$Title}" />
        <section class="media-description">
            <h2 class="slider-headline"><xsl:value-of  disable-output-escaping="yes" select="$Title" /></h2>
            <p><xsl:value-of disable-output-escaping="yes" select="$Details" /></p>
        </section>
    </li>
</xsl:template>

但问题是,在应用前两个模板时,<ul id="slider"></ul>似乎与所有<li>项目隔离,如下所示:

<ul id="slider"></ul>

<!-- a bunch of tables and td here.. -->

<ul style="width: 100%;" class="dfwp-column dfwp-list">
    <li class="dfwp-item"></li>
    <li>
        <img alt="Must-see US exhibitions" src="">
        <section class="media-description"><h2 class="slider-headline">Must-see US exhibitions</h2>
            <p>(Blank)</p>
        </section>
    </li>
    ...
</ul>

我想要的是让<ul id="slider>"元素直接包裹li's个, 那我怎么能这样做?

由于

2 个答案:

答案 0 :(得分:0)

您的输入XML是什么?

你会做这样的事情:

<xsl:template name="Slider" match="*[@GroupStyle='Slider']" mode="header"><!-- Sure you want to match *? -->
   <ul id="slider">
     <!-- Match the input XML path to your rows from the context of the matched element above -->
     <xsl:apply-templates select="Row[@Style='Slider']" mode="itemstyle" />
   </ul>
</xsl:template>


<xsl:template name="Slider" match="Row[@Style='Slider']" mode="itemstyle"> 
   <li>..</li>
</xsl:template>

无法弄清楚你使用“模式”的原因。

答案 1 :(得分:0)

问题解决了,感谢@James Love

以下是步骤:

  • 制作ContentQueryMain.xsl的副本,如以下article所述
  • 获得ContentQueryMain.xsl的副本后,编辑它并查找OutTemplate.Body
  • 然后你可以将你的包装器放在以下变量中(但它们必须被转义)

    <xsl:template name="OuterTemplate.Body">
        <xsl:variable name="BeginColumn1" select="string('&lt;ul id=&quot;slider&quot; class=&quot;dfwp-column dfwp-list&quot; style=&quot;width:')" />
                                                           <!--   ^------------------^   --> 
        <xsl:variable name="BeginColumn2" select="string('%&quot; &gt;')" />
        <xsl:variable name="BeginColumn" select="concat($BeginColumn1, $cbq_columnwidth, $BeginColumn2)" />
        <xsl:variable name="EndColumn" select="string('&lt;/ul&gt;')" />
                                                 <!--  ^---------^ -->
    

愚蠢的解决方法,但它的工作:S