我正在尝试更改AllItems.aspx页面上的超链接,指向我的文档库的自定义上传页面,名为CustomUpload.aspx。
假设我有两个文档库(列表)。一个名为 vsList ,在Visual Studio中创建并作为SharePoint解决方案的一部分进行部署,另一个名为 sdList ,从浏览器创建了常用方法。
这是我迄今为止成功完成的任务:
选项#1不是真正的解决方案,因为它仅适用于通过SP门户中基于Web的GUI编辑器直接创建的文档库。我需要在我在VS中创建的列表定义中定义所有这些。对于选项#2,问题几乎相同。如果我将自定义XSL复制并粘贴到AllItems.aspx页面,那么每次重新部署包含我的自定义列表定义的VS解决方案时,它都会被覆盖。所以我真的需要一个允许我在VS列表定义中定义自定义URL的解决方案。
这是我们应该做的 - 但不是:
我已经尝试将文件放在100个不同的地方,并且一直试图在“功能[我的项目名称] _PrimaryFeature \ CustomStyle.xsl”中查找它。它在哪里得到我将文件存储在该路径/位置的想法?即使我尝试将XSL文件存储在SharePoint映射的LAYOUTS / XSL目录中或实际SharePoint站点中的样式库文档库中,它仍然无法找到它。这真令人抓狂。路径,位置,目录结构和XSL已成为我尝试在SharePoint中完成任何事情的最大障碍。
请帮忙。
答案 0 :(得分:1)
所以这就是我最终做的......
我基本上执行步骤1&在我原来的尝试中上面的2并将整个站点模板导出到我工作站上的本地文件。然后我在Visual Studio中创建了一个新的SharePoint项目/解决方案(以免弄乱我现有的),选择从现有网站模板导入数据并选择 sdList 导入到我的新模板中溶液
导入过程完成后,我可以查看为AllItem.aspx生成的源代码(包含我使用SPD手动更新的XSL代码),然后将该代码复制到Schema.xml我现有SharePoint解决方案中 vsList 的文件。
在Schema.xml文件的View部分中,我在BaseViewID#1的标记之后添加了标记(即AllItems.aspx视图)并将代码粘贴在那里。
在理想的情况下,我宁愿将所有Xsl代码转储到外部文件中,然后只使用标签,但我无法使用它。由于某种原因,SharePoint无法找到该文件。这是我对SharePoint的一种厌恶(正如我原来的帖子所述):文件夹映射和文件位置。不必要的混淆。
对于那些感兴趣的人,这是自定义Xsl的样子。查找具有“CustomUpload.aspx”的行以及紧接其前后的行。不幸的是,我无法在此编辑器中加粗或突出显示代码部分,因此您必须自己进行一些调查。
<Xsl>
<![CDATA[
<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:ddwrt2="urn:frontpage:internal" xmlns:o="urn:schemas-microsoft-com:office:office">
<xsl:include href="/_layouts/xsl/main.xsl"/>
<xsl:include href="/_layouts/xsl/internal.xsl"/>
<xsl:param name="AllRows" select="/dsQueryResponse/Rows/Row[$EntityName = '' or (position() >= $FirstRow and position() <= $LastRow)]"/>
<xsl:param name="dvt_apos">'</xsl:param>
<xsl:template name="Freeform" ddwrt:ghost="" xmlns:ddwrt2="urn:frontpage:internal">
<xsl:param name="AddNewText"/>
<xsl:param name="ID"/>
<xsl:variable name="Url">
<xsl:choose>
<xsl:when test="List/@TemplateType='119'"><xsl:value-of select="$HttpVDir"/>/_layouts/CreateWebPage.aspx?List=<xsl:value-of select="$List"/>&RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/></xsl:when>
<xsl:when test="$IsDocLib"><xsl:value-of select="$HttpVDir"/>/_layouts/Upload.aspx?List=<xsl:value-of select="$List"/>&RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$ENCODED_FORM_NEW"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="HeroStyle">
<xsl:choose>
<xsl:when test="Toolbar[@Type='Standard']">display:none</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="$ListRight_AddListItems = '1' and (not($InlineEdit) or $IsDocLib)">
<table id="Hero-{$WPQ}" width="100%" cellpadding="0" cellspacing="0" border="0" style="{$HeroStyle}">
<tr>
<td colspan="2" class="ms-partline">
<img src="/_layouts/images/blank.gif" width="1" height="1" alt="" />
</td>
</tr>
<tr>
<td class="ms-addnew" style="padding-bottom: 3px">
<span style="height:10px;width:10px;position:relative;display:inline-block;overflow:hidden;" class="s4-clust"><img src="/_layouts/images/fgimg.png" alt="" style="left:-0px !important;top:-128px !important;position:absolute;" /></span>
<xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&nbsp;</xsl:text>
<xsl:choose>
<xsl:when test="List/@TemplateType = '115'">
<a class="ms-addnew" id="{$ID}-{$WPQ}"
href="{$Url}"
onclick="javascript:NewItem2(event, "{$Url}");javascript:return false;"
target="_self">
<xsl:value-of select="$AddNewText" />
</a>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="CustomUrl">
../../../_layouts/MyControls/CustomUpload.aspx?List=<xsl:value-of select="$List"/>
</xsl:variable>
<a href="{$CustomUrl}"><xsl:value-of select="$AddNewText" /></a>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
<tr>
<td>
<img src="/_layouts/images/blank.gif" width="1" height="5" alt="" />
</td>
</tr>
</table>
<xsl:choose>
<xsl:when test="Toolbar[@Type='Standard']">
<script type='text/javascript'>
if (typeof(heroButtonWebPart<xsl:value-of select="$WPQ"/>) != "undefined")
{
<xsl:value-of select="concat(' var eleHero = document.getElementById("Hero-', $WPQ, '");')"/>
if (eleHero != null)
eleHero.style.display = "";
}
</script>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="List/@TemplateType = '115'">
<script type='text/javascript'>
if (typeof(DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>) != "undefined")
{
<xsl:value-of select="concat(' var eleLink = document.getElementById("', $ID, '-', $WPQ, '");')"/>
if (eleLink != null)
{
DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>(eleLink);
}
}
</script>
</xsl:if>
</xsl:if>
</xsl:template></xsl:stylesheet>
]]>
</Xsl>
无论如何,我希望这可以帮助别人。