SharePoint XSLT列显示名称

时间:2013-04-26 08:09:02

标签: sharepoint xslt sharepoint-2013

我目前尝试在SharePoint Designer中的自定义表单中显示列名。我使用Sharepoint 2013,因此设计视图不再存在:(。 该表单用于在自定义列表中创建新元素。 我不能直接将名称放在tempate中,因为我想以不同的形式使用此模板,因此我必须动态恢复列的名称。 问题是我只找到了内部名称。 我在datafileds标签中看到有几个内部名称依赖于显示名称但我没有找到如何恢复显示名称。

只有可能吗?有人有意帮助我吗?

如果你想查看我的代码,我会放一些代码。 此部分查找名称包含“question”的属性,并在找到模板时调用模板“title_line”。函数name()给出了内部名称,即pb ...

<xsl:template match="Row">

 <xsl:for-each select="@*">
    <xsl:choose>                
        <xsl:when test="contains(name(),'Question')">
            <xsl:call-template name="title_line" >
                <xsl:with-param name="title" select="name()"/>
                <xsl:with-param name="class" select="'class_title'"/>
            </xsl:call-template>
        </xsl:when>

        <xsl:otherwise>
        </xsl:otherwise>    

   </xsl:choose>
 </xsl:for-each>

</xsl:template>

这部分是显示标题:

<xsl:template name="title_line" >
        <xsl:param name="title" select="'no title'" />
        <xsl:param name="class" select="'no_class'" />
        <tr>
            <td colspan ="2" class="{$class}" style="font-weight:bold;font-size:medium">
                <xsl:value-of select="$title" />
            </td>
        </tr>
</xsl:template>

我的解决方案:

我使用了JQuery 1.9.0和SPServices 0.7.2

将这些库导入标题。 ContentPlacdeHolderId PlaceHolderAdditionalPageHead 位于页面底部,我没有看到它并且由于重复而出现问题...) 关于源代码,我激活了发布并在样式库中创建了一个文件夹脚本。

<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server">
    <SharePoint:DelegateControl runat="server" ControlId="FormCustomRedirectControl" AllowMultipleControls="true"/>
    <SharePoint:UIVersionedContent UIVersion="4" runat="server">
        <ContentTemplate>
            <SharePoint:CssRegistration Name="forms.css" runat="server"/>

            <!-- add JQuery 1.9.0-->
            <script id ="JQUERY_ID" type="text/javascript" src="../../Style%20Library/Scripts/jquery-1.9.0.js">
            </script>   

            <!-- add SPServices 0.7.2 -->
            <script id ="JQUERY_ID" type="text/javascript" src="../../Style Library/Scripts/jquery.SPServices-0.7.2.js">
            </script>   

        </ContentTemplate>
    </SharePoint:UIVersionedContent>
</asp:Content>

现在标题的显示是:

<xsl:template name="title_line" >
    <xsl:param name="title" select="'no title'" />
    <xsl:param name="class" select="'no_class'" />
    <tr>
        <td colspan ="2" class="{$class}" style="font-weight:bold;font-size:medium">
            <script type="text/javascript">
                var static_name = &apos;<xsl:value-of select="$title" />&apos;;
                var display_name = $().SPServices.SPGetDisplayFromStatic ({ 
                     listName: "listeperso",
                     columnStaticName: static_name
                });
                document.write(display_name);
            </script>
        </td>
    </tr>

</xsl:template>

我只需要动态地获取列表的名称即可。

编辑:动态列表名称的脚本

<script type="text/javascript">
    var list_name = $().SPServices.SPListNameFromUrl();
    var static_name = &apos;<xsl:value-of select="$title" />&apos;;
    var display_name = $().SPServices.SPGetDisplayFromStatic ({ 
        listName : list_name,
        columnStaticName: static_name
    });
    document.write(display_name);
</script>

listName使用列表名称列表ID。 SPListNameFromUrl返回列表ID。

2 个答案:

答案 0 :(得分:0)

我看到有人有个主意。 我找到了一个Javascript库SPServices,它可以将静态名称转换为显示名称。

Link

我的新功能是集成脚本。我试着把它放到标题中:

<asp:Content ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
    <script type="text/javascript" src="../../Style%20Library/Scripts/jquery-1.9.0.js">
    </script>   
    <script type="text/javascript" >
       var azerty="jquery script";
       alert($azerty);
       $(document).ready(function() {
           alert("jQuery");
       });
    </script>
</asp:Content>

但导入不会出现在生成的页面中。有人有想法吗?

答案 1 :(得分:0)

我使用了JQuery 1.9.0和SPServices 0.7.2

将这些库导入标题。 ContentPlacdeHolderId PlaceHolderAdditionalPageHead 位于页面底部,我没有看到它并且由于重复而出现问题...) 关于源代码,我激活了发布并在样式库中创建了一个文件夹脚本。

<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server">
    <SharePoint:DelegateControl runat="server" ControlId="FormCustomRedirectControl" AllowMultipleControls="true"/>
    <SharePoint:UIVersionedContent UIVersion="4" runat="server">
        <ContentTemplate>
            <SharePoint:CssRegistration Name="forms.css" runat="server"/>

            <!-- add JQuery 1.9.0-->
            <script id ="JQUERY_ID" type="text/javascript" src="../../Style%20Library/Scripts/jquery-1.9.0.js">
            </script>   

            <!-- add SPServices 0.7.2 -->
            <script id ="JQUERY_ID" type="text/javascript" src="../../Style Library/Scripts/jquery.SPServices-0.7.2.js">
            </script>   

        </ContentTemplate>
    </SharePoint:UIVersionedContent>
</asp:Content>

现在标题的显示是:

<xsl:template name="title_line" >
    <xsl:param name="title" select="'no title'" />
    <xsl:param name="class" select="'no_class'" />
    <tr>
        <td colspan ="2" class="{$class}" style="font-weight:bold;font-size:medium">
            <script type="text/javascript">
                var static_name = &apos;<xsl:value-of select="$title" />&apos;;
                var display_name = $().SPServices.SPGetDisplayFromStatic ({ 
                     listName: "listeperso",
                     columnStaticName: static_name
                });
                document.write(display_name);
            </script>
        </td>
    </tr>

</xsl:template>

我只需要动态地获取列表的名称即可。

编辑:动态列表名称的脚本

<script type="text/javascript">
    var list_name = $().SPServices.SPListNameFromUrl();
    var static_name = &apos;<xsl:value-of select="$title" />&apos;;
    var display_name = $().SPServices.SPGetDisplayFromStatic ({ 
        listName : list_name,
        columnStaticName: static_name
    });
    document.write(display_name);
</script>

listName使用列表名称列表ID。 SPListNameFromUrl返回列表ID。