0

我从一个基本站点创建了一个站点模板,该站点本身是从基本团队站点模板创建的。现在我想在创建它的 Web 之外使用该站点模板,因此它就像一个全局模板。

例如,我希望我的新模板出现在 get-spwebtemplate 显示的模板列表中,或者将“stp”文件复制到测试系统并使用捆绑模板在那里创建一个新站点。

那可能吗?如果不可能,共享点正确的方法是什么?

(使用 SharePoint 2010 Server RC)

谢谢!

4

1 回答 1

0

我相信我现在知道该怎么做。我会很感激任何人权衡“正确”的方式来做到这一点,因为这个过程似乎有点奇怪。

使用 UI,您可以使用网站集中的库存模板创建 Web,并通过向其中添加片段和删除不需要的内容来自定义它。然后,选择您希望用作模板的网络,以管理员身份选择“站点设置”,然后选择“将站点另存为模板”,然后您可以在其中分配文件名、友好名称和描述性文本。这样做显然会将生成的模板放入数据库中,并创建一个参考,该参考也位于站点设置页面上的“解决方案”列表中。(如果您访问“解决方案”列表,您可以单击模板并将其保存为本地文件,然后可以将其上传到另一个站点,这很有帮助)。

众所周知,您可以通过将新网站添加到网站的网络集合中来用代码创建网站,如下所示:

SPWeb newWeb = subSite.Webs.Add(
                "pathtoweb",
                "Title of New Web",
                "Web Description",
                1033,
                template, 
                false, false);

这里的“模板”是您要使用的 SPWebTemplate 的一个实例。如果它是库存模板之一,您通常可以通过名称来引用它们,例如“STS#0”等,而不是此处显示的模板引用。问题是:如何获取自定义模板的名称以在 API 调用中使用它。

为了找到创建的模板的“名称”,我使用了这样的 PowerShell

$x = get-spsite http://machine/managedpath/sitecollectionname
$x.GetWebTemplates(1033) 

它转储了该子站点上的所有模板,并在最后包含了我修改过的模板,名称不是很方便,我将其复制并粘贴到我的 C# 程序中。

我没有在这里探索所有排列,例如,您可能只在 .Add 调用中使用基于 GUID 的名称,但明确地说,这是对我有用的序列。我很想听到这太疯狂了——请让我知道一些更优雅的事情:

        // or any of the other hundred ways to do this...
        SPSite s = new SPSite("your url here");
        SPWeb subSite = s.RootWeb;

        // 1033 is the locale id for English
        SPWebTemplateCollection wtc = s.GetWebTemplates(1033);
        // use the name for the index
        SPWebTemplate template = 
            wtc["{8925048C-DF71-guidguidguidguid}#MyTemplate"];

        SPWeb newWeb = subSite.Webs.Add(
                "pathtoweb",
                "Title of New Web",
                "Web Description",
                1033,
                template, 
                false, false);

共享!

于 2010-03-05T23:44:26.970 回答