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();
}
Belle, merci. – ScottE