SharePoint - 确定从中创建网站的自定义网站模板

时间:2013-03-06 02:45:42

标签: c# sharepoint-2010

我使用“网站设置”将“网站另存为模板”,然后使用该自定义网站模板创建几个网站(或者我应该将其称为解决方案?)

如何让我的C#找出从这个自定义网站模板创建的网站?

请注意,无论网站是否是使用此自定义模板创建的,SPWeb的.WebTemplate,.WebTemplateId和.Configuration都会分别返回“STS”,1和1。我认为那是因为他们报告了基础SharePoint开箱即用的模板。

提前致谢。

3 个答案:

答案 0 :(得分:1)

为什么不在网站的PropertyBag中添加一个条目?使用“web_template_id”键和模板的ID或名称作为值。您可以使用SharePoint Designer轻松完成此操作,并将PropertyBag作为Web模板WSP的一部分包含在内。

或者,如果您将模板导​​入Visual Studio,则可以声明性地在Web的属性包中添加一个条目,如下所示:

<Property Name="web_template_id" Value="SiteTemplates.TemplateName" Type="string" />

这是一个从代码中的SPWeb对象的AllProperties集合中获取自定义模板名称的简单案例。

答案 1 :(得分:0)

来自http://www.go4sharepoint.com/Forum/determine-site-template-site-11323.aspx

  

您可以使用WebTemplate和Configuration的组合   的性质       SPWeb对象,以找出最初构建网站的模板       从。 WebTemplate将包含类似“STS”的名称       12个hive Template / sitetemplates目录中的子目录       包含网站定义。配置将对应于       该子目录中onet.xml内的配置ID。不过那里       有几个问题。

这是一个与SharePoint 2007有关的参考,但我认为核心概念仍然适用,除了对“12”配置单元的任何引用外,应该引用“14”配置单元。

答案 2 :(得分:0)

要了解发生的情况,您需要了解网站定义和网络模板之间SharePoint的差异:

虽然经常互换使用,但它们是不同的,并且在SharePoint中的处理方式不同。站点定义,无论是开箱即用还是自定义,都存在于14 hive \ TEMPLATE \ SiteTemplates中。另一方面,Web模板将站点定义实例的自定义保存到.stp或.wsp文件,这允许该站点在其他站点实例中进行复制。

所以,这是真正的问题:甚至微软也对网站定义和网页模板之间的区别感到困惑。因为当他们命名WebTemplate属性时,他们意味着站点定义,而不是Web模板。

请注意MSDN所说的内容:

  

SPWeb.WebTemplate Property

     

通过将网站另存为模板来创建自定义网站模板时   然后从该模板WebTemplate创建一个新站点   property包含 网站定义的名称   自定义模板派生,而不是自定义模板的名称。因此如果   用于创建自定义模板的网站本身已创建   从标准团队网站定义,WebTemplate属性   从新模板创建的所有网站都将返回“STS”

     

SPWeb.Configuration Property

     

通过将网站另存为模板来创建网站模板时   然后从该模板创建一个站点,即Configuration属性   包含网站定义配置的ID   网站模板派生

(强调我的)

这支持您在问题中发现的内容。那么如何确定用于创建网站的自定义Web模板?我不确定这是可能的。因为如果可能的话,我希望MSDN能够提供另外一两句话,告诉他们如何完成他们刚刚解释过的这些属性不能做的事情。此外,在搜索时,我已经发现这个问题几次,但从来没有一个令人满意的答案。