Specificare più Sitemap in ASP.NET

Giorgio Borelli

specificare più di una sitemap in pagine aspx grazie al modello a providers di asp.netLe sitemap in ASP.NET permettono di specificare un menù gerarchico di navigazione in formato XML, basta includere un file sitemap nella root principale del sito web, che di default si chiama web.sitemap, ed associarlo successivamente ad uno dei controlli asp.net per la navigazione, quali: SiteMapPath, Menu, TreeView. Personalizzare i controlli di navigazione è molto semplice ed ecco bello è pronto il vostro controllo menù.

Il file web.sitemap è quindi il file di default per la navigazione in asp.net, ma come possiamo fare per specificare un'ulteriore sitemap se il nostro sito dovesse gestire due o più menu di navigazione differenti ed indipendenti tra di loro? In questo caso, per specificare più di una sitemap dobbiamo sfruttare proprio il modello a provider per la navigazione di ASP.NET.

Andiamo a scoprire come fare.

Per poter specificare più di una sitemap in asp.net, dobbiamo definire un'ulteriore provider per la navigazione all'interno del Web.Config, dentro la sezione System.Web, in modo da richiamarlo quando andremo ad implementare il nostro SiteMapDataSource per la seconda sitemap.

Andiamo per ordine, e vediamo passo passo come definire una seconda sitemap per la navigazione, supponiamo ad esempio di voler specificare un menù per il sito ed uno per il pannello administrator del nostro personalissimo CMS, vediamo come scrivere la seconda sitemap:

 

Definiamo un secondo file Sitemap

Specifichiamo all'interno del nostro sito (possiamo posizionarlo anche in un path diverso dalla root) un secondo file sitemap che conterrà i nodi gerarchici XML per il nostro menù di navigazione per l'amministrazione, e chiamiamolo ad es. WebAdmin.sitemap.

 

Specifichiamo un'ulteriore provider per la navigazione nel Web.Config

All'interno del Web.Config dentro il nodo system.web, definiamo il secondo provider per la navigazione associandogli la sitemap definita precedentemente e chiamata WebAdmin.Sitemap, in questo modo:

<system.web>
 ...
 <siteMap defaultProvider="SiteMapProvider" enabled="true">
  <providers>
   <add name="SiteMapProvider" description="Default SiteMap provider for menu navigation" siteMapFile="Web.sitemap" />
   <add name="AdminSiteMapProvider" description="Second SiteMap provider for admin navigation" siteMapFile="WebAdmin.sitemap" />
  </providers>
 </siteMap>
 ...
</system.web>

Come vedete all'interno del nodo sitemap definiamo con l'elemento "add" due provider per la navigazione, il primo SiteMapProvider associato alla Web.Sitemap che è quello di default, ed il secondo AdminSiteMapProvider associato alla WebAdmin.sitemap per la navigazione nel pannello amministratore.

 

Definiamo il SiteMapProvider

Adesso, in qualsiasi modo noi vogliamo rappresentare la nostra seconda sitemap, con un menu, con un breadcrumb, non dobbiamo far altro che specificare nella proprietà "SiteMapProvider" del nostro SiteMapDataSource il secondo provider che abbiamo definito pocanzi nel Web.Config, in questo modo:

<asp:Menu ID="MenAdmin" DataSourceID="WebSiteAdminData" runat="server"></asp:Menu>

<asp:SiteMapDataSource ID="WebSiteAdminData" SiteMapProvider="AdminSiteMapProvider" runat="server" />

Mettiamo in evidenza che nel controllo asp.net menu indichiamo alla proprietà "DataSourceID" il "SiteMapDataSource" definito sotto, in quest'ulimo invece, nella sua proprietà "SiteMapProvider" specifichiamo il provider "AdminSiteMapProvider" che richiama la seconda web.sitemap, ovvero WebAdmin.Sitemap, come avevamo indicato nel Web.Config.

 

Conclusioni

Bene, con questi tre semplici passaggi abbiamo specificato un'ulteriore sitemap per il nostro sito asp.net, ovviamente con il modello a provider di asp.net possiamo definire tutte le sitemap che vogliamo e possiamo anche indicare un path diverso in cui posizionarle rispetto a quello di default che è la directory principale del nostro sito web.

Chiunque voglia aggiungere qualcosa in merito all'argomento, porre una domanda o dare un suggerimento, ogni commento è ben accetto.

Categorie: ASP.NET

Tags: ,

Commenti (2) -

Sem Tamburella
Sem Tamburella says:

ai due elementi <add/> manca l'attrituto type="System.Web.XmlSiteMapProvider"

per cui

<system.web>

...
  
<siteMap defaultProvider="SiteMapProvider" enabled="true">
  <providers>
   <add type="System.Web.XmlSiteMapProvider" name="SiteMapProvider" description="Default SiteMap provider for menu navigation" siteMapFile="Web.sitemap" />
   <add type="System.Web.XmlSiteMapProvider" name="AdminSiteMapProvider" description="Second SiteMap provider for admin navigation" siteMapFile="WebAdmin.sitemap" />
  </providers>
</siteMap>

...

Rispondi

Giusta puntualizzazione Sem, aggiungiamo, vista la mia dimenticanza, che XmlSiteMapProvider specifica il tipo predefinito per le sitemap di ASP.NET

Grazie per il tuo intervento, se vuoi aggiungere qualsiasi altro chiarimento sarò felice di leggerlo.

Rispondi

Aggiungi Commento

biuquote
Loading