// 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);
1 回答
我相信我现在知道如何做到这一点 . 我很感激任何人都可以用“正确”的方式来做这件事,因为这个过程看起来有点奇怪 .
使用UI,您可以使用网站集中的库存模板创建Web,并通过向其添加片段来自定义Web,并删除您不想要的内容 . 然后,选择要用作模板的Web,作为管理员,选择“站点设置”,然后选择“将站点另存为模板”,然后您可以在其中分配文件名,友好名称和描述性文本 . 这样做可以明显地将生成的模板放入数据库中,并创建一个引用,该引用也位于“站点设置”页面的“解决方案”列表中 . (如果您访问“解决方案”列表,则可以单击模板并将其另存为本地文件,然后可以将其上载到其他站点,这很有帮助) .
众所周知,您可以通过向网站的网络集合添加新网站来创建代码中的网站,如下所示:
其中'template'是您要使用的SPWebTemplate的实例 . 如果它是股票模板之一,您通常可以通过名称引用它们,例如“STS#0”等,而不是此处显示的模板参考 . 问题是:如何获取自定义模板的名称以在API调用中使用它 .
为了找到创建的模板的“名称”,我像这样使用PowerShell
它转储了这个子网站上的所有模板,并在最后包含了我修改过的模板,并没有非常方便的名称,我将其复制并粘贴到我的C#程序中 .
我没有在这里探索所有的排列,例如,你可以在.Add调用中使用基于GUID的名称,但为了明确,这是对我有用的序列 . 我很想听到这很疯狂 - 请让我知道一些更优雅的东西:
的SharePoint!