in

didierdanse.net

Site personnel de Didier Danse
Didier Danse's Personnal Website
Microsoft Most Valuable Professional SharePoint

This Blog

Syndication

didierdanse.net - Les news Developpement

September 2009 - Posts

  • SharePoint: Afficher une master page custom quelque soit le template utilisé

    Lorsque l’on créée des templates de sites personalisés, on est rapidement tenté d’y attacher par défaut une master page également personalisée. Cela s’avère assez simple à réaliser mais là où cela se complique c’est lorsqu’on souhaite attacher, par défaut, notre master page aux templates existants. On pourrait aisément modifier le nom de la master page active mais dans un contexte où les utilisateurs crèent eux mêmes leurs sites sur base des templates, il est probable que ceux-ci ne configurent pas cette master page.

    Ainsi, puisque dans la majorité des cas nous nous retrouverons avec la master page par défaut, nous pourrions être tenté de remplacer cette master page par la nôtre. Cela n’est malheureusement pas supporté par Microsoft. On travaillera donc autrement et on modifiera, à la volée le nom de la master page à utiliser. Pour cela, il suffit d’intercepter les requêtes à l’aide d’un HttpModule. Pour faire faire simple, un HttpModule permet d’exposer des évènements qui participeront à chacune de vos demandes de page web.

    Dans notre cas, nous attacherons un handler à l’évènement PreInit de la page qui est demandée.

    Un HttpModule est simplement à mettre en oeuvre et doit implémenter deux méthodes de base: Dispose et Init. Ainsi, voici un exemple de code implémentant les éléments cités précédemment.

    public class MasterPageManagerHttpModule : IHttpModule { #region IHttpModule Members public void Dispose() { } public void Init(HttpApplication context) { context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute); } void context_PreRequestHandlerExecute(object sender, EventArgs e) { Page page = HttpContext.Current.CurrentHandler as Page; if (page != null) page.PreInit += new EventHandler(page_PreInit); } void page_PreInit(object sender, EventArgs e) { Page page = sender as Page; if (page == null || page.MasterPageFile == null) return; if (page.MasterPageFile.ToLower().Contains("default.master")) { page.MasterPageFile = "~sitecollection/_catalogs/masterpage/custom.master"; // Master page can be uploaded to layouts folder also return; } if (page.MasterPageFile.ToLower().Contains("application.master")) { page.MasterPageFile = "~sitecollection/_catalogs/masterpage/customapplication.master";

    return; } } #endregion }

    Il nous reste à indiquer, dans le web.config qu’il est nécessaire d’utiliser ce HttpModule.

    <add name="MasterPageManager" type="Company.Portal.Features.MasterPageManagerHttpModule.MasterPageManagerHttpModule, Company.Portal.Features.MasterPageManagerHttpModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" />

    Vu le type d’évènement, on déploiera ce code à l’aide d’une feature ayant comme scope la WebApplication et qui se chargera, à l’activation, de modifier le web.config comme indiqué dans ce post: SharePoint: How to use SPWebConfigModification class

    Simple mais efficace.



More Posts
L'auteur du site ne peut être tenu responsable des dommages que les informations fournies pourraient entraîner. Tout est cependant mis en oeuvre pour éviter tout désagrément.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems