Personalizzare la MasterPage di SharePoint

di Marco Leoncini, in SharePoint,

Una delle caratteristiche più apprezzate di SharePoint è sicuramente la possibilità di personalizzare l'intera piattaforma. Ciò nonostante alcune circostanze potrebbero pretendere un intervento tanto estremo da richiedere la ridefinizione dell'intero layout.

Quest'operazione può essere eseguita creando una nuova MasterPage, prestando particolare attenzione a non dimenticare i circa trenta controlli che sono indispensabili al corretto funzionamento di Sharepoint.
Vista la complessità insita nel partire da una pagina vuota utilizziamo come base di partenza la Default.master che possiamo trovare in: "\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\GLOBAL".
Apportiamo tutte le modifiche necessarie alla copia di DefaulMaster e creiamo una nuova Features a livello di SiteCollection. Lo scopo è di aggiungere la nuova MaserPage alla lista della MasterPage di SharePoint e rendere disponibile attraverso il menu una nuova ApplicationPage, che utilizzeremo per abilitare o meno la nuova MasterPage.

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="MasterPages" List="116" Url="_catalogs/masterpage">
    <File Url="MyMasterPage.master" Type="GhostableInLibrary" />
  </Module>
  <CustomAction 
     Id="SiteActionsToolbar"
     GroupId="SiteActions"
     Location="Microsoft.SharePoint.StandardMenu"
     Sequence="1000"
     RequireSiteAdministrator="TRUE" 
     Title="MasterPage personalizzata"
     Description="Gestione MastePage personalizzata">
     <UrlAction Url="~sitecollection/_layouts/MyMasterPage/ManageMyMasterPage.aspx"/>
  </CustomAction>
</Elements>

Il lavoro nudo e crudo è eseguito dall'Application Page, che sarà raggiungibile dal menu di SharePoint una volta attivata la Feature. Più precisamente, alla pressione di un bottone, una volta recuperato il sito corrente, imposteremo la nuova MasterPage e salveremo le modifiche apportate:

protected void ApplyCustomMasterPageButton_Click(object sender, EventArgs e)
{
  SPWeb _site = SPContext.Current.Web;

  string _masterUrlPath = _site.ServerRelativeUrl;

  if (!_masterUrlPath.EndsWith(@"/"))
  {
    _masterUrlPath += @"/";
  }

  //imposto l'url della nuova MasterPage
  _masterUrlPath = _masterUrlPath + @"_catalogs/masterpage/MyMasterPage.master";
  //applico le modifiche
  ApplyCustomMasterPage(_masterUrlPath, _site);

  Response.Redirect(Request.RawUrl);
}

protected void ApplyCustomMasterPage(string MasterUrlPath, SPWeb site)
{
  site.MasterUrl = MasterUrlPath;
  //imposto un nuovo logo
  site.SiteLogoUrl = "/_layouts/images/MyMasterPage/MyMasterPage.gif";

  //aggiorno il sito
  site.Update();

  //ciclo per applicare la MastePage a tutti i sotto siti
  foreach (SPWeb child in site.Webs)
  {
      ApplyCustomMasterPage(MasterUrlPath, child);
  }
}

Questo approccio è possibile in quanto SharePoint non fa riferimento nelle proprie pagine alla collocazione fisica della MastePage, ma utilizza per lo scopo un Token risolto attraverso l'uso di un VirtualPathProvider personalizzato.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi