首先,假设我在端口80的单个Web应用程序中有2个网站集合:

  1. 主站点集合: /
  2. 嵌套网站集: / sites / special /

    所以,假设我在网站收集方案特征中有一个模块,其目的是在一个站点集中添加几个脚本(这可以很容易地部署为自定义主页中的ScriptLink控件。对于网站集,我的问题仍然适用):

      <CustomAction Id="script1" Location="ScriptLink" ScriptSrc="/Style%20Library/mySolution/custom1.js" />
      <CustomAction Id="script2" Location="ScriptLink" ScriptSrc="/_layouts/mySolution/custom2.js" />
    
    .

    在主“root”站点集中在主要的“root”站点集中激活功能时,上述两项工作都很好。但是,如果我只将该功能部署到辅助'特殊'站点集合(新隔离边界,嵌套URL路径),则脚本1不会参考中断?

    浏览器将在以下路径上查找custom1.js:

    / style library / mysolution / custom1.js

    真的,文件是

    / sites / special / style library / mysolution / custom1.js

    第二个scriptlink始终有效,因为_layouts是全局的,因此浏览器始终找到/_layouts/mysolution/custom2.js无论该功能部署到哪个站点集合。

    正确?我想我只是做了理智检查。

    我很诱惑我可以在/ style库中的ad-hoc基础上进行编辑的脚本,但是,讨厌这样的想法,即这样的功能(如上所述)只会在根级别网站集中工作。

有帮助吗?

解决方案

尝试这个第一个链接,因为它旨在准确地解决您所看到的内容,尽管某些控件不会扩展值。

<CustomAction Id="script1" Location="ScriptLink" ScriptSrc="~SiteCollection/Style%20Library/mySolution/custom1.js" />
.

是否应该在_layouts或style图书馆中是自2006年SP2007 Beta自2006年以来的辩论,没有明确的赢家。一般规则是,如果该文件是由站点所有者修改的东西,那么它应该进入“样式库”,如果文件只有管理员应该能够修改的东西,那么它进入_layouts。当然,我简化了两个位置之间至少有十几个差异。

这只是官方SharePoint回答所有内容的地方的另一个地方:“它取决于”

其他提示

请查看这个问题 。这是一个复杂的主题,没有“正确”的答案。我认为Chris O'Brien在他的答案中很好地总结了它。

我的个人意见是,它取决于:)在您的情况下,由于您想要在两个(或更多)站点集合中使用相同的.js文件,我肯定会将其放在“_layouts”下。

另一个问题是:你有开发阶段吗?发展验收 - 生产?你有某种源码控制吗?如果其中任何一个是肯定的,那么我会再次将它置于“_layouts”下。特别是因为它是一个JavaScript文件。为什么?因为JavaScript也包含“代码”,它执行某种逻辑,有时它甚至有业务逻辑(如果在提交之前填写某些字段,则隐藏某些字段)。如果您的所有.NET代码都经过开发 - >接受在进行生产前,JavaScript代码为什么通过直接生产的JavaScript代码是“特权”?为什么它不应该通过相同的测试阶段?当然应该。

如果您有源控制,并且使用模块将文件部署到文档库作为“GheactableInlibrary”,我认为这是噩梦的开始,如果您让人们定制它。想象一下,您将文件(JS或CSS)部署到10个网站集。在其中5个站点管理员已修改文件。这意味着您的文件现已从文件系统上的版本解耦。接下来要将某些全局更改部署到此文件,并且希望它将应用于所有站点集合,它将在文件已自定义的那些中默默地失败。首先需要将这些文件还原为网站定义,然后将考虑模块推动的文件。但是您将松开任何修改这些网站管理员所做的。或者,如果您想保留其中一些修改并将其放在源控制上的版本中......您必须乘坐每个自定义文件,一个逐个将它们与源控制器上的一个进行比较,并合并更改。不,我认为这更好地避免。

,但您知道SharePoint Farm以及如何使用它。因此,您的设置中可能有一些特殊性,请要求将这些文件放入样式库中。如果是这样,请告诉我,我很好奇:)

欢呼!

许可以下: CC-BY-SA归因
scroll top