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: "
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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.