25 Şubat 2008

ASP.NET Uygulamalarında Birden Fazla Sitemap Dosyası Kullanma

ASP.NET Uygulamalarında Birden Fazla Sitemap Dosyası KullanmaASP.NET uygulamalarında navigasyon kontrollerini SiteMapDataSource ile birlikte kullandığımızda sadece bir tane sitemap dosyası kullanılabilmekteyiz. Bu durumun sebebi uygulamalarındaki web.config dosyasının miras alarak kullandığı .NET Framework'ün kurulu olduğu dizindeki web.config dosyasında sadece bir tane SiteMap sağlayıcısı (provider) tanımlamasının yapılmasıdır. .NET Framework 2.0 kurulu bir makinada C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG dizininde bulunan web.config dosyasındaki <siteMap> düğümüne bakacak olursanız tanımlanan tek bir provider'ın olduğunu ve bununda siteMapFile niteliğinde web.sitemap dosya isminin olduğunu görebilirsiniz. Aslında buradan yola çıkarak birden fazla sitemap dosyasını nasıl kullanabileceğimizi çözümleyebiliriz. Uygulamamıza ikinci bir sitemap dosyası eklemek ve navigasyon kontrolleri ile birlikte kullanmak istersek öncelikli olarak uygulamadaki web.config dosyasına yeni bir siteMap provider tanımlaması yapmamız gerekecektir. Aşağıda web.config dosyamızın <system.web> kısmına ekleyeceğimiz kodlar bulunmaktadır.


web.config
<system.web>
...
<siteMap>
<providers>
<add name="SiteMapProvider2" siteMapFile="web2.sitemap" type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</siteMap>
</system.web>

SiteMapProvider2 adında web2.sitemap isimli dosya ile çalışacak yeni bir siteMap sağlayıcısı tanımladık. Bu uygulama içerisinde artık web.sitemap dışında web2.sitemap isimli bir site haritası dosyası da kullanabiliriz. Bir ASP.NET sayfasına iki tane Menu kontrolü ve iki tane SiteMapDataSource kontrolü ekleyerek birden fazla sitemap dosyası kullanımını test ediyoruz. Burada dikkat edeceğimiz nokta web2.sitemap isimli dosyamıza bağlanacak olan SiteMapDataSource kontrolünde SiteMapProvider özelliğini web.config'de tanımladığımız SiteMapProvider2 isimli sağlayıcıya eşitlemek olacaktır.


Default.aspx
<asp:Menu ID="Menu1" runat="server" BackColor="#B5C7DE" DataSourceID="SiteMapDataSource1" Font-Names="Verdana" Font-Size="12px">
</asp:Menu>
<br />
<asp:Menu ID="Menu2" runat="server" BackColor="#E3EAEB" DataSourceID="SiteMapDataSource2" Font-Names="Verdana" Font-Size="12px">
</asp:Menu>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="False" />
<asp:SiteMapDataSource ID="SiteMapDataSource2" runat="server" ShowStartingNode="False" SiteMapProvider="SiteMapProvider2" />

17 Şubat 2008

SiteMap Dosyasında Kendi Bilgilerimizi Saklamak

Site navigasyon işlemlerinde kullanmak için oluşturduğumuz sitemap dosyaları bildiğiniz gibi site içindeki sayfaların hiyerarşik yapılarını saklamaktadır. url, title ve description gibi sayfa hakkında detaylı bilgileri içerisinde saklayan siteMapNode düğümlerinde istersek kendimize ait nitelikler tanımlayarak özel bilgileri de saklayabiliriz. Nasıl mı?

Olayı basite indirgemek için site haritamızda sadece 4 kategori bulunsun: ASP.NET, ADO.NET, C# ve SQL Server. Normal durumlarda bu sayfalar hakkında url ve title, bazen de description bilgilerini saklarız. İstiyoruz ki bu 4 bölümün editörlerini de site haritası dosyasında saklayalım. Yapılacak tek işlem ilgili düğümler içerisine Editor="Veli" gibi tanımlamalar yapmak olacaktır. Bir sonraki adımda sayfa içerisinden bu bilgileri okumakta yine bu kadar kolay olacak! Aşağıdaki örnekte web.sitemap dosyası ve bir sayfadan bu bilgiyi nasıl elde edeceğimiz görülmektedir.

Web.sitemap
<?xml version="1.0" encoding="windows-1254" ?>
<siteMap>
   <siteMapNode url="Default.aspx" title="Anasayfa">
     <siteMapNode url="Aspnet.aspx" title="ASP.NET" description="" Editor="Uğur UMUTLUOĞLU" />
     <siteMapNode url="Adonet.aspx" title="ADO.NET" description="" Editor="Burak BATUR" />
     <siteMapNode url="Cs.aspx" title="C#" description="" Editor="Emrah USLU" />
     <siteMapNode url="SqlServer.aspx" title="SQL Server" description="" Editor="Bülent SÖZGE" />
   </siteMapNode>
</siteMap>


Sablon.master.cs
Response.Write(SiteMap.CurrentNode["Editor"]);

12 Şubat 2008

web.config Dosyasından URL ReWriting

URL ReWriting (sayfa adresini yeniden oluşturma) işlemi özellikle sayfalarımızda QueryString'leri kullanırken sıklıkla başvurmak istediğimiz bir işlemdir. Bu işlem karmaşık olan sayfa adresleri daha okunur ve sade hale getireceği gibi arama motorlarının sitemizdeki sayfaları daha verimli şekilde yakalamasını da sağlar. URL ReWriting'i uygulamanın birçok yolu bulunmaktadır. Kullanım bakımından en kolay yollardan biri de web.config dosyası ile bu işlemi gerçekleştirmektir. web.config dosyasında <system.web> düğümü içerisinde açacağımız <urlMappings> düğümü ile bu işlemin kolay şekilde yapılmasını sağlayabiliriz. Örneğin yazarların bilgilerini görüntüleyen bir sayfada içerik QueryString'den alınan bir veriye göre oluşsun. Sayfa arka planda aslında Yazar.aspx?isim=ugur şeklinde çalışıyor fakat biz adresin Ugur.aspx şeklinde görüntülenmesini istiyoruz. web.config dosyası içerisine ekleyeceğimiz aşağıdaki kod parçaları işimizi görecektir. mappedUrl niteliği sayfanın gerçek URL'ini, url niteliği ise görüntülenmesi istenilen URL'ini belirler. Yani Ugur.aspx gibi bir sayfaya istek geldiğinde aslında böyle bir sayfa olmayacaktır fakat adres kısmında bu URL görünecek ve arka planda Default.aspx?isim=ugur URL'i çalıştırılacaktır.


<configuration>
   <system.web>
      <urlMappings enabled="true">
         <add url="~/Ugur.aspx" mappedUrl="Default.aspx?isim=ugur" />
         <add url="~/Emrah.aspx" mappedUrl="Default.aspx?isim=emrah" />
         <add url="~/Burak.aspx" mappedUrl="Default.aspx?isim=burak" />
      </urlMappings>

      ...
      ...
   </system.web>
</configuration>


url niteliğinde relative adres belirlemek zorunludur. Yani çağrılacak URL'in tam yolunu ~/ şeklinde belirlemek gerekecektir. Bu işlemin çok az da olsa performans kaybına sebep olacağını da unutmamak lazım!