Desenvolvimento - ASP. NET

Criando um Menu baseado em arquivos SiteMap

Neste artigo vou falar sobre o desenvolvimento de um menu para o seu site baseado em arquivos sitemap.

por Guilherme de Carvalho Carneiro



Neste artigo vou falar sobre o desenvolvimento de um menu para o seu site baseado em arquivos sitemap. Primeiramente temos que criar o(s) arquivo(s) sitemap, que no final deve ter o formato abaixo.

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="Administrador" description="">

<siteMapNode title="Principal" url="~/admsistema/frm_principal.aspx" description="Página inicial do sistema"/>

<siteMapNode title="Cadastrar usuário" url="~/admsistema/frm_cadastrar_usuario.aspx" description=""/>

<siteMapNode title="Manutenção" url="" description="">

<siteMapNode title="Vara" url="~/admsistema/frm_atualizar_vara.aspx" description="Administrar vara"/>

</siteMapNode>

<siteMapNode title="Sair" url="~/admsistema/frm_logoff.aspx" description="Sair do sistema"/>

</siteMapNode>

</siteMap>


Explicando o formato do arquivo

Cada item siteMapNode será um item do menu, percebe-se que os itens estão aninhados, onde tenho nós pais como por exemplo <siteMapNode title="Principal" url="~/admsistema/frm_principal.aspx" description="Página inicial do sistema"/> que será um item do menu, e temos nós filhos como por exemplo <siteMapNode title="Vara" url="~/admsistema/frm_atualizar_vara.aspx" description="Administrar vara"/> que no caso só será visto no momento em que o usuário passar o mouse por cima do nó pai. Para configurar um nó filho deve-se tomar o cuidado de colocá-lo internamento entre a tag <siteMapNode> e </siteMapNode>.

Mas isto é apenas para demonstrar a estrutura do arquivo, visto que o próprio Visual Studio gera toda a estrutura do arquivo.

Configurando o web.config

Para se trabalhar com os arquivos siteMap temos que fazer a inserção de uns parâmetros no nosso web.config, mas é coisa bem simples mesmo, devemos dizer quais arquivos serão usados pela aplicação. Como estamos trabalhando com acesso separados por nível de usuário iremos cadastrar vários arquivos no web.config, onde o defaultProvider vai determinar qual o siteMap padrão para o sistema carregar no componente menu. Para cada arquivo siteMap que desejar usar deve-se adicionar uma tag dentro de providers, no formato destacado abaixo

<siteMap defaultProvider="Advogado" enabled="true">
<providers>
<add name="Advogado" type="System.Web.XmlSiteMapProvider" siteMapFile="~/admsistema/Advogado.SiteMap"/>
<add name="Administrador" type="System.Web.XmlSiteMapProvider" siteMapFile="~/admsistema/Administrador.SiteMap"/>
<add name="Secretaria" type="System.Web.XmlSiteMapProvider" siteMapFile="~/admsistema/Secretaria.SiteMap"/>
<add name="Socio" type="System.Web.XmlSiteMapProvider" siteMapFile="~/admsistema/Socios.SiteMap"/>
<add name="Estagiario" type="System.Web.XmlSiteMapProvider" siteMapFile="~/admsistema/Estagiario.SiteMap"/>
<add name="Cliente" type="System.Web.XmlSiteMapProvider" siteMapFile="~/admsistema/Cliente.SiteMap"/>
</providers>
</siteMap>

Determinando via código qual o siteMap a ser carregado no componente Menu.

Na página aspx vamos inserir o componente menu, e também um siteMapDataSource como abaixo

<asp:SiteMapDataSource ID="SMDS" SiteMapProvider="Advogado" runat="server" ShowStartingNode="False" />

Veja que estou determinando qual o siteMapProvider vou usar inicialmente Advogado ou seja o mesmo nome que deu para o meu primeiro SiteMap, a referencia deve ser feita usando o parâmetro name dos providers inseridos no web.config.

Por fim vamos carregar um siteMap diferenciado. Para isto basta carregar via código o provider que eu quero usar.

SMDS.SiteMapProvider = "Administrador"

Assim o sistema vai carregar o siteMap do usuário administrador.

Configuração do asp:menu na página aspx

Já a Tag com a configuração do Menu está logo abaixo, onde devemos destacar o DataSourceID, que deve apontar para o SiteMapDataSource configurado logo acima. Outro parâmetro que vale destacar é o Orientation que determina se o menu vai ser exibido na horizontal ou vertical. Os parâmetros em verde são estilos css para os estados dos objetos do menu, como o HoverStyle que vai aplicar um estilo quando o mouse estiver sobre o elemento.


<asp:Menu ID="MenuSistema" runat="server" DataSourceID="SMDS" Orientation="Horizontal" DynamicEnableDefaultPopOutImage="False" StaticEnableDefaultPopOutImage="False" DynamicVerticalOffset="5" Height="25px">
<DynamicMenuItemStyle CssClass="cssmenuxmlsubmenu" />
<StaticMenuItemStyle CssClass="cssmenuxmlitens" />
<DynamicHoverStyle CssClass="cssmenusubitenshover" />
<DynamicMenuStyle CssClass="csssubmenuxml" />
<StaticHoverStyle CssClass="cssmenuxmlitenshover" />
</asp:Menu>

Guilherme de Carvalho Carneiro

Guilherme de Carvalho Carneiro