首页 文章

Sharepoint:如何更改新创建的子网站的默认页面布局?

提问于
浏览
1

我正在开发一个拥有许多子网站的sharepoint 2010发布网站 . 我已经设置了自定义母版页和几个自定义页面布局 .

我已经发现如何在子网站中设置用于新创建页面的默认页面布局(在/_Layouts/AreaTemplateSettings.aspx中找到),但我似乎无法弄清楚如何指定用于创建的默认页面布局〜 /Pages/default.aspx当我创建一个新的子网站时 .

现在它选择了WelcomeLinks.aspx,这不是我想要的 .

这是否仅在我通过代码部署自定义母版页/布局时才可用,如果是,那么有没有人有任何好的例子?

谢谢 .

4 回答

  • 1

    您不需要部署自定义页面布局,但确实需要使用代码 . 我们解决这个问题的方法是为WebProvisioned事件创建一个事件接收器,该事件将在创建新的SPWeb后触发 .

    您可以做的是使用所需的页面布局更新新Web中的PublishingPage . 这允许用户创建新的Web,但您可以设置每个新Web的默认页面布局 .

    这是事件接收者代码:

    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();
    }
    
  • 4

    新创建的子网站的页面布局由网站定义确定 . 例如,如果使用带有工作流模板的发布站点创建子站点,则使用14 \ TEMPLATE \ SiteTemplates \ BLANKINTERNET \ XML \ onet.xml中的配置ID =“2”创建该站点 . 在该配置中是一个指向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使用WelcomeLinks页面布局设置default.aspx .

    如果您希望默认页面使用不同的页面布局,则有两个选项:

    • 基于使用所需页面布局的BLANKINTERNET创建自定义网站定义 .

    • 继续使用开箱即用的网站定义,使用自定义代码(由功能装订或事件接收器启动),从WelcomeLinks更改页面布局 .

  • 3

    如果在站点上启用了发布功能,则应该如下所示:

    网站设置,外观,欢迎页面和选择页面

  • 0

    似乎当您将发布子网站添加到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);
    

相关问题