Мне кажется, я знаю, как это сделать сейчас.Я был бы благодарен за то, чтобы кто-нибудь взвесил «правильный» способ сделать это, потому что этот процесс кажется немного странным.
Используя пользовательский интерфейс, вы можете создать веб-сайт, используя шаблон запаса в семействе сайтов, и настроить его, добавив в него фрагменты и удалив ненужные вещи.Затем, выбрав веб, который вы хотите использовать в качестве шаблона, в качестве администратора выберите «Настройки сайта», а затем «Сохранить сайт как шаблон», где вы можете назначить имя файла, понятное имя и текст описания.Это позволяет поместить полученный шаблон в базу данных и создать ссылку, которая также содержится в списке «Решения» на странице «Параметры сайта».(Если вы посещаете список «Решения», вы можете щелкнуть шаблон и сохранить его как локальный файл, который затем можно загрузить на другой сайт, что полезно).
Достаточно хорошо известно, что вы можете создать сайт в коде, добавив новый веб-сайт в веб-коллекцию сайта, которая выглядит следующим образом:
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 # программу.
Я не исследовал все перестановки здесь, например, вы, вероятно, можете просто использовать имя на основе GUID в вызове .Add, но, для ясности, это последовательность, которая работала для меня.Мне бы очень хотелось услышать, что это безумие. Пожалуйста, дайте мне знать что-нибудь более изящное:
// 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!