Sharepoint: Как изменить макет страницы по умолчанию для вновь создаваемых дочерних сайтов? - PullRequest
1 голос
/ 16 ноября 2010

Я работаю над сайтом публикации sharepoint 2010, который имеет много дочерних сайтов. Я настроил собственную главную страницу и несколько пользовательских макетов страниц.

Я обнаружил, как установить макет страницы по умолчанию, используемый для вновь создаваемых страниц на дочернем сайте (находится по адресу /_Layouts/AreaTemplateSettings.aspx), но я не могу понять, как указать используемый макет страницы по умолчанию создать ~ / Pages / default.aspx при создании нового дочернего сайта.

Сейчас он выбирает WelcomeLinks.aspx, и это не то, что я хочу.

Доступно ли это, только если я развертываю пользовательские главные страницы / макеты с помощью кода, и если да, есть ли у кого-нибудь хорошие примеры?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 16 ноября 2010

Макет страницы вновь созданного дочернего сайта определяется определением сайта. Например, если вы создаете дочерний сайт, используя сайт публикации с шаблоном рабочего процесса, то этот сайт создается с использованием идентификатора конфигурации = "2" из 14 \ TEMPLATE \ SiteTemplates \ BLANKINTERNET \ XML \ onet.xml. В этой конфигурации есть раздел модуля, который указывает на SubWebWelcome:

<Module Name="SubWebWelcome" Url="$Resources:osrvcore,List_Pages_UrlName;" Path="">
    <File Url="default.aspx" Type="GhostableInLibrary" Level="Draft" >
        <Property Name="Title" Value="$Resources:cmscore,IPPT_HomeWelcomePage_Title;" />
        <Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/WelcomeLinks.aspx, $Resources:cmscore,PageLayout_WelcomeLinks_Title;" />
        <Property Name="ContentType" Value="$Resources:cmscore,contenttype_welcomepage_name;" />
    </File>
</Module>

Как видите, SubWebWelcome обеспечивает default.aspx, используя макет страницы WelcomeLinks.

Если вы хотите другой макет страницы для страницы по умолчанию, у вас есть два варианта:

  1. Создайте пользовательское определение сайта на основе BLANKINTERNET, которое использует желаемый макет страницы.
  2. Продолжайте использовать готовое определение сайта с пользовательским кодом (запускаемым сшиванием объектов или получателями событий), который изменяет макет страницы с WelcomeLinks.
3 голосов
/ 16 ноября 2010

Вам не нужно развертывать пользовательский макет страницы, но вам нужно использовать код.Мы решили это путем создания Приемника событий для события WebProvisioned, которое будет срабатывать после создания нового SPWeb.

Что вы можете сделать, это обновить PublishingPage в новой сети с помощью макета страницычто ты хочешь.Это позволяет пользователям создавать новые сети, но вы можете установить макет страницы по умолчанию для каждого нового веб-сайта.

Это код получателя события:

public override void WebProvisioned(SPWebEventProperties properties)
{
    try
    {
        if (PublishingWeb.IsPublishingWeb(properties.Web))
        {
            PublishingWeb curPubWeb = PublishingWeb.GetPublishingWeb(properties.Web);

            foreach (PageLayout curLayout in curPubWeb.GetAvailablePageLayouts())
            {
                if (curLayout.Name == "DefaultPageLayout.aspx")
                {
                    foreach (PublishingPage curPage in curPubWeb.GetPublishingPages())
                    {
                        curPage.CheckOut();
                        curPage.Layout = curLayout;
                        curPage.Update();
                        curPage.CheckIn("");
                    }
                    break;
                }
            }
        }
    }
    catch (Exception ex)
    {
        /* Handle exception here */
    }
}

И это код для регистрацииприемник событий (его можно запустить, когда ваша функция активирована или можно запустить один раз из сценария PowerShell или консольного приложения):

using (SPSite topSite = new SPSite("[Site Collection URL]"))
{
    SPEventReceiverDefinition webEventDef = topSite.EventReceivers.Add();
    webEventDef.Name = "Web Adding Receiver";
    webEventDef.Synchronization = SPEventReceiverSynchronization.Synchronous;
    webEventDef.Type = SPEventReceiverType.WebProvisioned;
    webEventDef.SequenceNumber = 4001;
    webEventDef.Assembly = "MyCustomAssembly, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=123456789";
    webEventDef.Class = "MyCustomAssembly.CustomEvents";
    webEventDef.Data = "Adding publishingwebfeatures";
    webEventDef.Update();
}
1 голос
/ 03 декабря 2011

Если на сайте включена функция публикации, она должна быть такой же простой, как и:

Настройки сайта, внешний вид, страница приветствия и выбор страницы

0 голосов
/ 16 октября 2013

Похоже, что при добавлении в SharePoint публикуемых дочерних веб-сайтов не похоже, что они наследуют макет страницы родительских веб-сайтов по умолчанию.Более того, даже если вы называете SetDefaultPageLayout передачей true для сброса всех дочерних сайтов, этот параметр все еще не остается неизменным.

После создания всей структуры моего сайта (дочерних сайтов) мне пришлось реализоватьследующая рекурсивная функция, обеспечивающая наследование самого верхнего макета страницы по умолчанию, надеюсь, это кому-нибудь поможет.

// Recursively update sub-webs to inherit the default page layout.
Action<PublishingWeb> updateWebRecursive = null;
updateWebRecursive = new Action<PublishingWeb>((parentWeb) =>
{
    PublishingWebCollection childWebs = parentWeb.GetPublishingWebs();
    if (!parentWeb.Web.IsRootWeb)
    {
        parentWeb.InheritDefaultPageLayout();
        parentWeb.Update();
    }
    foreach (PublishingWeb childWeb in childWebs)
    {
        updateWebRecursive(childWeb);
    }
});
updateWebRecursive(pubWeb);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...