2011-06-20 3 views
1

Permettez-moi d'exposer ma question: J'ai un site racine, avec une page maître, et de nombreux sous-sites. Certains utilisent la page maître du site racine (en héritant) et d'autres n'utilisent pas la page maître du site racine.Actualiser la page maître pour les sous-sites lors de l'application d'un nouveau site Web racine

Lorsque je mets à jour le site racine MP avec un récepteur d'événements de fonction comme ça:

SPWeb w = ((SPSite)properties.Feature.Parent).OpenWeb(); 
Uri masterUri = new Uri(w.Url + "/_catalogs/masterpage/AdventureWorks.master"); 
//MasterPage used by publishing pages 
w.CustomMasterUrl = masterUri.AbsolutePath; 
w.AllowUnsafeUpdates = true; 
w.Update(); 

... la page principale est mis à jour pour le site racine, mais pas pour les sous-sites wich hériter du maître racine du site page! Et quand je vais à la page des paramètres de la page du site principal pour un sous-site, la case d'option "Hériter la page maître du site du parent de ce site" est bien cochée.

Lorsque j'applique la nouvelle MasterPage à partir de la page "Paramètres de la page principale du site", je ne rencontre pas ce problème. Pour information: Mon site racine dans un site publidhing et les fonctionnalités «SharePoint Server Publishing Infrastructure» et «SharePoint Server Publishing» sont en cours d'exécution.

Quelque chose me manque?

Répondre

1

Toujours pas de réponses après un mois:/Donc, je suppose qu'il n'y a pas de mécanisme pour mettre à jour toutes les pages maîtres pour les sous-sites. J'ai donc mettre à jour la fonction récepteur d'événements activé comme ceci:

using (SPWeb w = ((SPSite)properties.Feature.Parent).OpenWeb()) 
     { 
      Uri masterUri = new Uri(w.Url + "/_catalogs/masterpage/AdventureWorks.master"); 
      w.CustomMasterUrl = masterUri.AbsolutePath; 
      w.AllowUnsafeUpdates = true; 
      w.Update(); 

      foreach (SPWeb ww in w.Site.AllWebs) 
      { 
       if (!ww.IsRootWeb) 
       { 
        Hashtable hash = ww.AllProperties; 
        if (string.Compare(hash["__InheritsCustomMasterUrl"].ToString(), "True", true) == 0) 
        { 
         ww.CustomMasterUrl = masterUri.AbsolutePath; 
         ww.AllowUnsafeUpdates = true; 
         ww.Update(); 
        } 
       } 
      } 
     } 

L'objectif est de tester, foreach sous-site Web, si elle hérite masterpage (ou non). Si c'est le cas, nous devons mettre à jour la propriété CustomMasterUrl.

0

Utilisez cette option pour définir masterpage sur la racine et tous les sous-sites:

 var web = site.RootWeb; 

     web.MasterUrl = web.CustomMasterUrl = SPUtility.ConcatUrls(web.ServerRelativeUrl, "_catalogs/mymaster.master"); 
     web.Update(); 

     foreach (SPWeb subWeb in site.AllWebs) 
     { 
      using (subWeb) 
      { 
       if (subWeb.IsRootWeb) continue; 

       var hash = subWeb.AllProperties; 

       subWeb.MasterUrl = subWeb.CustomMasterUrl = web.MasterUrl; 

       hash["__InheritsMasterUrl"] = "True"; 
       hash["__InheritsCustomMasterUrl"] = "True"; 

       subWeb.Update(); 
      } 
     } 
Questions connexes