Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

Navigation

Search

Categories

On this page

Global.asax ile ReWriter

Archive

Blogroll

RSS 2.0 | Atom 1.0 | CDF
EkleBunu RSS Ekle Butonu

Send mail to the author(s) E-mail

Total Posts: 16
This Year: 0
This Month: 0
This Week: 0
Comments: 0

Sign In

 Wednesday, March 05, 2008
Wednesday, March 05, 2008 3:43:57 PM (GTB Standard Time, UTC+02:00) ( ASP.NET )
Çoğu sitede blog 'da karşılaştığımız sayfalama tekniğinde konu başlığı ile aynı olan sayfalrın nasıl yapıldığını düşünmüşüzdür.
Acaba bunlar tek tek sayfa olarakmı kaydediliyor ve nasıl yapılıyor. İşte tam bu sıra .Net teknolojisinin bize sunduğu nimetlerden yararlanmaya geldi.
ASP.NET ile bu tarz sayfaları hazırlamamız okadar kolayki şimdi aşağıda antalacağım yöntem ile sizde şaşıracaksınız.

Peki yazıdan önce bu tarz sayfalar benim ne işime yaracak diye düşünürseniz  tabiki herşeyden önce sitenizin arama motorlarında iyi bir yerde indexlenmesinin sağlanmasıdır.
Arama motorları sayfalarımızı indekslerken bizim adlandırdığımız şekilde kayıtları tutacak. Buda daha sonra yapılan arama sorgularında daha başarılı sonuçlarla, daha öncelikli olarak listelenmesini sağlayacaktır.

Not: Arama sonuçlarında her zaman sayfa url’leri başlık ve içeriğe göre daha fazla öncelik sağlar.

Öncelikle veri tabanımızı ve kodlarımızı oluşturmaya başlayalım.



Örnek için bir kaç veri ekleyelim.


Veritabanımızı oluşturduktan sonra projemize bir adet global.asax dosyası ekliyoruz. Daha sonra “items” isminde bir klasör ve içerisinede default.aspx isminde bir sayfa ekliyoruz. Listelemek içinde ana root’taki Default.aspx sayfasını kullanacağız.Veri tabanımız için ASP.NET Folder menüsünden APP_Data klasörü açıyoruz ve *.mdb mizi buraya koyuyoruz birde dabase imize bağlnamakta bize kolaylık sağlayan yine APS.NET Folder ı olan APP_Code klasörü koyuruz ve buna sağtıklayıp dataset ekleyip veri tabani bağlantılarımızı yapıyoruz.

Sırasıyla Global.asax, Default.aspx ve /items/default.aspx kodlarını yazmaya başlayalım.

Global.asx dosyamız
<%@ Application Language="C#" %>

<script runat="server">


void Application_BeginRequest(object sender, EventArgs e)
{
// İlkeönce işelmleri yapmak istediğimiz sayfanın url bilgisini almalıyız. // Örnek olarak /items/Firat-Aydinus-Canımızı-Yakti.html gibi. string filePath = Request.RawUrl;

// IndexOf fonksiyonu ile almış olduğumuz url içinde items klasörünü arayalım. // Böle bir kontrol yapmadığımız takdirde tüm dosyalarda rewriter işlemi yapmak isteyecektir. if (filePath.IndexOf("/items/") != -1)
{
// Bu kontrolude geçtikten uzantıyı belitritiyoruz burda ben html olarak belirtim. // Eğer istersen bu uzantıyı istediğimiz gibi değiştirebiliriz. if (System.IO.Path.GetExtension(filePath) == ".html")
{
// Bu kontrolüde aştıktansonra verimizi çekebilmemiz için gerekli olan ID yayya ulaşmamız gerekli. //Split fonksiyonu ile url lemizi dizi haline çevirip ID değerine ulaşmamız gerekli. string[] spltUrl = System.IO.Path.GetFileName(filePath).Split('-');

// Aşağıdaki işlemler ilk önce gerçek sayfa yolunu, daha sonraki parametre ile ID değerini gönderiyoruz. Context.RewritePath("~/items/default.aspx", "", "id=" + spltUrl[0], true);
}
}
}

</script>

Default.aspx


<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
<ItemTemplate>
<li><asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl='<%# ReWriteURL(Eval("idItem").ToString(), Eval("itemHead").ToString()) %>'><%#Eval("itemHead")%></asp:HyperLink></li>
</ItemTemplate>
</asp:Repeater>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData" TypeName="DataSet1TableAdapters.tblItemsTableAdapter" DeleteMethod="Delete"
InsertMethod="Insert" OldValuesParameterFormatString="original_{0}" UpdateMethod="Update">
<DeleteParameters>
<asp:Parameter Name="Original_idItem" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="itemHead" Type="String" />
<asp:Parameter Name="itemText" Type="String" />
<asp:Parameter Name="Original_idItem" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="itemHead" Type="String" />
<asp:Parameter Name="itemText" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>

</div>
</form>
</body>
</html>


Default.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

public string ReWriteURL(string _id, string _head)
{
string _strTemp = string.Empty;

//Bu fonksiyon ile kayıtlardan gelen başlık içerisinde bulunan // ve geçerli olmayan karaterleri tarayıcıların tanıya bilmesi // url lerimizin daha anlamlı hale gelmesi için gerekli replace // işlemlerini yapacaktır. _strTemp = _head.ToLower();

_strTemp = _strTemp.Replace("-", "");
_strTemp = _strTemp.Replace(" ", "-");
_strTemp = _strTemp.Replace("ç", "c");
_strTemp = _strTemp.Replace("ğ", "g");
_strTemp = _strTemp.Replace("ı", "i");
_strTemp = _strTemp.Replace("ö", "o");
_strTemp = _strTemp.Replace("ş", "s");
_strTemp = _strTemp.Replace("ü", "u");
_strTemp = _strTemp.Replace("\"", "");
_strTemp = _strTemp.Replace("/", "");
_strTemp = _strTemp.Replace("(", "");
_strTemp = _strTemp.Replace(")", "");
_strTemp = _strTemp.Replace("{", "");
_strTemp = _strTemp.Replace("}", "");
_strTemp = _strTemp.Replace("%", "");
_strTemp = _strTemp.Replace("&", "");
_strTemp = _strTemp.Replace("+", "");
_strTemp = _strTemp.Replace(".", "-");
_strTemp = _strTemp.Replace("?", "");
_strTemp = _strTemp.Replace(",", "");
return "items/" + _id + "-" + _strTemp + ".html";
}

}


items/default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="items_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
<ItemTemplate>
Item ID = <%#Eval("idItem")%><br />
<br />
Item Head = <%#Eval("itemHead")%><br />
<br />
Item Detail = <%#Eval("itemText")%><br />
<br />
</ItemTemplate>
</asp:Repeater>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="Delete" InsertMethod="Insert" OldValuesParameterFormatString="original_{0}" SelectMethod="GetDataBy" TypeName="DataSet1TableAdapters.tblItemsTableAdapter" UpdateMethod="Update">
<DeleteParameters>
<asp:Parameter Name="Original_idItem" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="itemHead" Type="String" />
<asp:Parameter Name="itemText" Type="String" />
<asp:Parameter Name="Original_idItem" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:QueryStringParameter Name="idItem" QueryStringField="id" Type="Int32" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="itemHead" Type="String" />
<asp:Parameter Name="itemText" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>

</div>
</form>
</body>
</html>

Şimdi sırasıyla ekran görüntülerimizi inceleyiniz.






Anlatmış olduğum konuyu dan birşey anlmadığınızı düşünürseniz aşağıda örnek dosyalarıda koydum indirip sisteminizde deneye bilirsiniz.
Burada anlatıklarımı eğer ilk defa bu işe başlıyorsanız anlamaya bilirsiniz.

Bu Dosyayı İndirmek İçin Tıklayınız (rewriterPath.rar (16,86 KB))

Engin TERZİ