如何引用/查找SharePoint 2010网站模板?

时间:2010-02-05 23:58:53

标签: sharepoint sharepoint-2010

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

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

这可能吗?如果不可能,什么是sharepoint-correct方式?

(使用SharePoint 2010 Server RC)

谢谢!

1 个答案:

答案 0 :(得分:0)

我相信我现在知道该怎么做。我很感激任何人都可以用“正确”的方式来做这件事,因为这个过程看起来有点奇怪。

使用用户界面,您可以使用网站集中的股票模板创建网站,并通过向其添加部分来自定义网页,并删除您不想要的内容。然后,选择要用作模板的Web,作为管理员,选择“站点设置”,然后选择“将站点另存为模板”,然后您可以在其中分配文件名,友好名称和描述性文本。这样做可以明显地将生成的模板放入数据库中,并创建一个引用,该引用也位于“站点设置”页面的“解决方案”列表中。 (如果您访问“解决方案”列表,则可以单击模板并将其另存为本地文件,然后可以将其上载到其他站点,这很有帮助)。

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

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

其中'template'这里是您要使用的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);

的SharePoint!