Ana içeriğe atla

Tree Menu ( Sonsuz Derinlikte Menu )

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...

Ajax Kütüphanesi

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.
var AjaxActive = false;
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 );
}
Gönderi Fonksiyonu
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 sonra
Baş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

Adsız dedi ki…
Bu ajax basket uygulaması için php de değişkene nasıl atama yaparız yani ajaxı php ile bütünleşik nasıl kullanırız, çünkü başka bir sayafda bu değişkenleri kullanmamız gerekebilir, saygılarımla.

Bu blogdaki popüler yayınlar

Merkez Bankası Döviz Kuru Scripti

bugrakaan [at] gmail.com tarafından hazırlanmış ve daha önceden AdobeTurk sitesinde yayınlanmış olan scriptin tarafımdan geliştirilmiş/sadeleştirilmiş hali. // php ile doviz kuru // e : bugrakaan [at] gmail.com // edit : goktug.ozturk [at] hurbilisim.com $currency = array( "USD" => "", "EUR" => "" ); $convert = array( "isim" => "I", "forexbuying" => "A", "forexselling" => "S", ); $content = file_get_contents( "http://www.tcmb.gov.tr/kurlar/today.xml" ); echo $content; foreach( $currency as $code => $arr ) { preg_match( "' (.*) 'Uis", $content, $crst ); foreach( $convert as $field => $value ) { preg_match( "' (.*) 'Uis", $crst[2], $frst ); $currency[$code][$value] = $frst[1]; } } echo "Dolar Alış : {$currency['USD']['A']}" . "Dolar Satış : {$currency['USD...