2010-11-16 3 views
1

Je travaille sur un site de publication SharePoint 2010 qui a de nombreux sous-sites. J'ai configuré une page maître personnalisée et plusieurs mises en page personnalisées.Sharepoint: Comment modifier la mise en page par défaut des sous-sites nouvellement créés?

J'ai découvert comment définir la mise en page par défaut utilisée pour les pages nouvellement créées dans un sous-site (trouvé dans /_Layouts/AreaTemplateSettings.aspx), mais je n'arrive pas à comprendre comment spécifier la mise en page par défaut utilisé pour créer ~/Pages/default.aspx lorsque je crée un nouveau sous-site.

Maintenant, il sélectionne WelcomeLinks.aspx, et ce n'est pas ce que je veux.

Est-ce seulement disponible si je déploie des pages maîtres personnalisées/mises en page par code, et si oui, quelqu'un a-t-il de bons exemples?

Merci.

Répondre

3

Vous n'avez pas besoin de déployer une mise en page personnalisée, mais vous devez utiliser du code. La façon dont nous avons résolu cela est de créer un Event Receiver pour l'événement WebProvisioned qui se déclenchera après la création d'un nouveau SPWeb.

Ce que vous pouvez faire est de mettre à jour le PublishingPage dans le nouveau site web avec la mise en page que vous voulez. Cela permet aux utilisateurs de créer de nouveaux sites Web, mais vous permet de définir la mise en page par défaut de chaque nouveau site Web.

C'est le code de récepteur d'événements:

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 */ 
    } 
} 

Et ceci est le code pour enregistrer le récepteur d'événements (ce qui peut être exécuté lorsque votre fonction est activée ou peut être exécuté une fois à partir d'un script PowerShell ou de l'application de la console):

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(); 
} 
+0

Belle, merci. – ScottE

4

La mise en page d'un sous-site nouvellement créé est déterminée par la définition du site. Par exemple, si vous créez un sous-site à l'aide du modèle Site de publication avec workflow, ce site est créé à l'aide de l'ID de configuration = "2" à partir de 14 \ TEMPLATE \ SiteTemplates \ BLANKINTERNET \ XML \ onet.xml. Au sein de cette configuration est une section de module qui pointe vers 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> 

Comme vous pouvez le voir, les dispositions de la SubWebWelcome de default.aspx en utilisant la WelcomeLinks Mise en page.

Si vous voulez une autre mise en page pour la page par défaut, vous avez deux options:

  1. Création d'une définition de site personnalisé basé sur BLANKINTERNET qui utilise votre mise en page la page désirée.
  2. Continuez à utiliser la définition de site prête à l'emploi avec du code personnalisé (lancé par l'agrafage de fonction ou par des récepteurs d'événements) qui modifie la mise en page de WelcomeLinks.
1

Si la fonction d'édition est activée sur le site, il devrait être aussi simple que d'aller:

Paramètres du site, Look and Feel, page d'accueil et en sélectionnant la page

0

Il semble que lorsque Si vous ajoutez des sous-sites de publication à SharePoint, il ne semble pas hériter de la mise en page par défaut des sites parents. Qui plus est, même si vous appelez SetDefaultPageLayout en passant true pour réinitialiser tous les sous-sites, ce paramètre ne tient toujours pas.Après l'échafaudage de toute ma structure de site (sous-sites Web), j'ai dû implémenter la fonction récursive suivante pour assurer que la mise en page par défaut la plus haute est héritée, j'espère que cela aidera quelqu'un.

// 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); 
Questions connexes