Feature pour définir la page d'accueil d'un site

June 08, 2012

Pour définir la page d’accueil d’un site, il faut normalement définir la propriété PublishingWeb.DefaultPage.

Si l’on souhaite, depuis une feature, définir la page d’accueil du site, le premier réflexe sera de définir cette propriété depuis un FeatureReceiver.

Il existe toutefois une méthode plus simple, sans code. En effet, la page d’accueil est stockée dans le PropertyBag du dossier racine du site.

Un petit script PowerShell peut rapidement le montrer :

(get-spweb http://localhost).RootFolder.Properties["vti_welcomepage"]

Comme alors définir cette propriété depuis une feature ? Tout simplement en alimentant le PropertyBag du dossier racine, avec un fichier element.xml pouvant ressembler à celui-ci :

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <PropertyBag ParentType="Folder" Url="">
        <Property Name="vti_welcomepage"
            Type="string"
            Value="Pages/home.aspx" />
    </PropertyBag>
</Elements>

Attention à bien définir l’attribut Url, même s’il est vide. Sans celui-ci une exception sera levée.