PHP'de sonsuz derinlikte menü yapmak için düzgün bir tablo yapısı ve çok basit bir recursive fonksiyon yeterli. Tablo Yapısı CREATE TABLE `category` ( `sid` int(12) unsigned NOT NULL auto_increment, `module` set('estate','cars') collate utf8_bin NOT NULL, `parentId` int(6) NOT NULL, `title` varchar(255) collate utf8_bin NOT NULL, `isDefault` int(1) NOT NULL default '1', PRIMARY KEY (`sid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=14 ; INSERT INTO `category` VALUES (1, 0x657374617465, 0, 0x536174c4b16cc4b16b20456d6c616b, 1); INSERT INTO `category` VALUES (2, 0x657374617465, 1, 0x45766c6572, 1); INSERT INTO `category` VALUES (3, 0x657374617465, 1, 0xc4b0c59f7965726c657269, 1); INSERT INTO `category` VALUES (4, 0x657374617465, 1, 0x417273616c6172, 1); INSERT INTO `category` VALUES (5, 0x657374617465, 0, 0x4b6972616cc4b16b20456d6c616b, 1); INSERT INTO `category` VALUES (6, 0x657374617465, 5, 0x45766c6572, 1); INSERT INT...
Geçtiğimiz yıl birden patlama yapan Ajax ve sitelere kazandırdığı dinamikliği çoğunuz farketmişsinizdir.
Şu anda etrafta birçok Ajax kütüphanesi bulunuyor. Kendi hazırlamış olduğum ve uygulamalarımın hepsinde kullandığım kütüphaneyi sizinle paylaşmak istiyorum.
Ajax.js
Bu dosya tüm gerekli tanımlamaları ve fonksiyonları barındırmaktadır. Ajax fonksiyonlarını kullanacağınız bir sayfada bu dosyayı yüklemeniz gerekmektedir.
Bu fonksiyon ziyaretçi sitenizde bir işlem yaptığında gerekli verileri alan ve Ajax sınıfını çağıran fonsiyondur.
Örnek olarak: Bir e-mağazada alınacak ürün miktarının yazılabildiği bir alan ve 'sepete at' butonu olduğunu varsayalım. addToBasket fonksiyonu ise butonun onclick işleminde çağrılsın.
Başarılı ise;
Cevap Fonksiyonu
İyi Günler.
Şu anda etrafta birçok Ajax kütüphanesi bulunuyor. Kendi hazırlamış olduğum ve uygulamalarımın hepsinde kullandığım kütüphaneyi sizinle paylaşmak istiyorum.
Ajax.js
Bu dosya tüm gerekli tanımlamaları ve fonksiyonları barındırmaktadır. Ajax fonksiyonlarını kullanacağınız bir sayfada bu dosyayı yüklemeniz gerekmektedir.
var AjaxActive = false;Gönderi Fonksiyonu
var AjaxActions = new Array();
function AjaxPost()
{
this.Url = '';
this.Parameters = '';
this.Request = false;
this.Result = '';
this.AjaxObject = '';
this.ResponseFunction = getResponse;
this.OgeNo = '';
this.fStartAction = startAction;
this.fGetResponse = getResponse;
}
function startAction( a, b, c )
{
this.Url = a;
this.Parameters = b;
this.OgeNo = c;
if ( window.XMLHttpRequest )
{ // Mozilla, Safari,...
this.Request = new XMLHttpRequest();
if ( this.Request.overrideMimeType )
this.Request.overrideMimeType('text/xml; charset=UTF-8');
}
else if ( window.ActiveXObject )
{ // IE
try
{
this.Request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
this.Request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
//Nothing
}
}
}
if ( !this.Request )
{
alert('Bağlantı hatası oluştu. Lütfen tekrar deneyiniz.');
window.location = window.location;
return false;
}
var MyClass = this;
this.Request.onreadystatechange = function() {
if ( MyClass.Request.readyState == 4 )
{
if ( MyClass.Request.status == 200 )
{
MyClass.ResponseFunction(MyClass.Request.responseText);
}
else
MyClass.ResponseFunction(false);
}
};
this.Request.open( "POST", this.Url, true );
this.Request.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
this.Request.setRequestHeader( "Content-length", this.Parameters.length );
this.Request.setRequestHeader( "Connection", "close" );
this.Request.send( this.Parameters );
}
Bu fonksiyon ziyaretçi sitenizde bir işlem yaptığında gerekli verileri alan ve Ajax sınıfını çağıran fonsiyondur.
Örnek olarak: Bir e-mağazada alınacak ürün miktarının yazılabildiği bir alan ve 'sepete at' butonu olduğunu varsayalım. addToBasket fonksiyonu ise butonun onclick işleminde çağrılsın.
function addToBasket(F){
//Gerekli kontroller
if(F.ItemCount.value < 1)
{
alert("En az bir ürün satın almalısınız.");
return false;
}
//Form alanlarının ve yükleniyor uyarısının düzeltilmesi
document.getElementById("BasketForm_"+F.ItemID.value).style.display = 'inline';
document.getElementById("BasketLoading_"+F.ItemID.value).style.display = 'none';
//AutoID
yenioge = AjaxActions.length;
//Ajax sınıfının yeni bir kopyası oluşturuluyor
AjaxActions[yenioge] = new AjaxPost();
//İşlem sonunda gelen cevabın gönderileceği javascript fonksiyonu
AjaxActions[yenioge].ResponseFunction = updateBasket;
//İşleme başlama komudu: fStartAction('Çağrılacak URL', 'Gönderilecek POST verisi', yenioge);
AjaxActions[yenioge].fStartAction( 'Sources/Php/basket.php?Rand='+Math.random(10000), 'ItemID='+F.ItemID.value+'&ItemCount='+F.ItemCount.value, 'updateBasket', yenioge );
return false;
}Benim çağırmış olduğum php dosyası işlemini yaptıktan sonraBaşarılı ise;
{id:1,count:1,name:'Ürün Adı',price:'25.00'}Hata oluşmuş ise;{message:'Hata mesajımız...'}şeklinde bir veri döndürüyor. Bu veri bir javascript objesine dönüştürülerek kullanılmak üzere hazırlandı.Cevap Fonksiyonu
function updateBasket(Result){
//Gelen veriyi objeye çeviriyoruz.
eval('itemz = new Object('+Result+');');
//Eğer hata mesajı varsa hata mesajını gösteriyoruz
if (itemz.message ) alert(itemz.message);
//Zorunlu veri kontrolü
if (!itemz.id) return false;
//Sepete ürünü ekleme
Basket.addItem(itemz.id,itemz.name,itemz.count,itemz.price);
//Form alanlarının ve yükleniyor uyarısının düzeltilmesi
document.getElementById("BasketForm_"+itemz.id).style.display = 'inline';
document.getElementById("BasketLoading_"+itemz.id).style.display = 'none';
return true;
}Sınıfın giriş ve çıkış fonksiyonları ayrıca tanımlandığı için bir sınırlama olmadan tüm Ajax uygulamalarında kullanmanıza olanak sağlamaktadır. Bununla beraber birden fazla ajax işlemini eşzamanlı gerçekleştirebilmesi gelişmiş Ajax uygulamaları için önemli bir avantaj sağlamaktadır.İyi Günler.
Yorumlar