У меня проблема с SharePoint, с которой мне нужна помощь. Я создаю несколько пользовательских стилей ItemStyles для форматирования вывода веб-части запроса контента (CQWP), но мне нужно вставить кнопку «Просмотреть все» в вывод.
Просмотр всех должен указывать на:
http://www.site.com/subsite/doclibrary1/Forms/AllItems.aspx
Все отдельные файлы в библиотеке документов имеют ссылку:
http://www.site.com/subsite/doclibrary1/FileName.doc
Итак, мне нужны некоторые функции XSL для удаления FileName.doc из конца строки.
Я пытался использовать substring-before ($ variable, '.'), Чтобы избавиться от .doc, но затем мне нужно найти способ использовать substring-after для поиска прямой косой черты в серии. и обрезать потерянное имя файла.
Используя сообщение @Mads Hansen, этот код решил проблему:
Шаблон в ItemStyle.xsl
<xsl:template name="ImpDocs" match="Row[@Style='ImpDocs']" mode="itemstyle">
<xsl:variable name="SafeLinkUrl">
<xsl:call-template name="OuterTemplate.GetSafeLink">
<xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="ViewAllLink">
<xsl:call-template name="OuterTemplate.getCleanURL">
<xsl:with-param name="path" select="@LinkUrl"/>
</xsl:call-template>
</xsl:variable>
<div class="DocViewAll">
<a href="{$ViewAllLink}Forms/AllItems.aspx" title="View all">View All</a>
<!--Any other code you need for your custom ItemStyle here-->
</div>
</xsl:template>
Шаблон в ContentQueryMain.xsl
<xsl:template name="OuterTemplate.getCleanURL">
<xsl:param name="path" />
<xsl:choose>
<xsl:when test="contains($path,'/')">
<xsl:value-of select="substring-before($path,'/')" />
<xsl:text>/</xsl:text>
<xsl:call-template name="OuterTemplate.getCleanURL">
<xsl:with-param name="path" select="substring-after($path,'/')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise />
</xsl:choose>
</xsl:template>