Ajaxla php arama motoru yapma

18 Haziran 2014 Çarşamba

Bazi web siteleri kendi arama motorlarında kullanıcıya yardımcı olmak amacıyla otomatik metin tamamlama scripti kullanıyorlar. Arama kutusuna bir kaç harf yazdığınızda arama kutusunun hemen altında dinamik açılan bir kutuda size arama önerilerinde bulunuyor. Böylece kullanıcı arama yapmakta zorlanmıyor. Bu yazımda size kendi yazdığım, PHP ile örneklediğimGoogle suggest benzeri AutoComplete | otomatik metin tamamlama scriptini nasıl kullacağımızı anlattım. Ajax kullanacağımız AutoComplete | Otomatik Metin Tamamlamascriptini JSON veri tipini kullanarak yapacağız. 

AutoComplete | Otomatik Metin Tamamlama scriptinin kullanıma hazırlanması

Uygulamanın kullanıcı tarafında kullancağımız scripti jquery ile yaptım. JavaScript dosyasının ismi auto_complete.js . Uygulamanın çalışır haline buradan , dosyalara buradanulaşabilirsiniz. Uygulamanin çalışır hali:

PHP-Jquery-Google-suggest-benzeri-AutoComplete-Otomatik-Metin-Tamamlama-Hazirlamak

Şimdi scripti kullacağımız sayfanın html head etiketleri arasına aşağıdaki javascript ve css dosyalarını sayfaya dahil edelim:
1<script src="jquery-1.3.2.min.js"></script>
2<link type="text/css" rel="stylesheet" href="auto_complete_theme.css"/>  
3<script >
4// kelime önerilerinin anlınacağı php sayfasını bu global değişkene kaydetmemiz gerekiyor.
5// Benim gösterdiğim örnekte bu arama_oneri.php
6var arama_sayfasi= "arama_oneri.php";
7</script>
8<script src="auto_complete.js">
9</script>
Sayfaya Jquery scritptini ve css dosyasını dahil ettikten sonra sayfanın body kısmına ekleyeceğimiz arama formunu aşağıdaki gibi ekleyelim:
1<form id="arama_form"  action="yonlendirilecek_sayfa_buraya" method="get" >
2    <input autocomplete="off" type="test" name="arama" id="arama"  >
3    <button value="submit" type="submit" text="button" > submit </button>
4    <div id="oneriler" class="oneriler" >
5    </div>
6</form>

AutoComplete | Otomatik Metin Tamamlama uygulamasının Sunucu tararlı kodun hazırlanması

Tamamlanacak metinleri ve sonuç sayısını alacağımız php scriptini yazmamız gerekiyor. Javascript dosyasında JSON verisi ile ajax isteği yapılacağı için PHP scriptinde verileri JSON formatında yollamamız gerekiyor. Aslında burada tek yapacağımız verileri json formatında yollamak o kadar. Tabii yollanacak JSON verisinin Jquery scriptinde( auto_complete.js ) algılanması için şu çıktıya benzer bir şekilde bir Json çıktısı yollamamız gerek:

PHP-Jquery-Google-suggest-benzeri-AutoComplete-Otomatik-Metin-Tamamlama-Hazirlamak

Bu çıktıyı verecek PHP sayfamız aşağıdaki gibi olacak:
01// PHP ve Jquery ile Google suggest benzeri AutoComplete
02// | Otomatik Metin Tamamlama Hazırlamak
03
04// arama formundan gonderilen kelimeyi GET metodu ile alıyoruz (tabii set edilmişse).
05if (isset($_GET['kelime']))
06{   $aranan=trim($_GET['kelime']);
07
08    // kelime hecelerle eşleştirme yapılarak eşleşen
09    // heceye göre bir çıktı gönderiyoruz istemciye.
10
11    if ( $aranan=="a")
12    {
13        $a=array( "as"=> "5""asa" => "2","asalak"=> "1""asık" => "4"
14        ,"aslan"=> "6""atıl" => "3" ,"atılım" =>"7""az" => "2"  );
15        echo json_encode($a);
16    }
17
18    else if ( $aranan=="as")
19    {
20        $as=array("as"=> "5""asa" => "2","asalak"=> "1",
21        "asık" => "4" ,"aslan"=> "6" );
22        echo json_encode($as);
23    }
24}
Kullanıcı arama kutusunu her harf girdiğinde bu PHP sayfasına Ajax isteğinde bulunacak ve sayfadan dönen Json verisini düzenleyip önerileri düzenli bir şekilde kullanıcıya gösterecek. Biz bu örnekte sadece "a" ve "as" ile başlayan kelimeler için öneri gönderiyoruz. Gerçek bir uygulamada tabii böyle olmayacaktır. Gerçekte ya arama önerilerini ve sonuç sayısını daha önceden bir tabloya kaydedecek, daha sonra o tablodan verileri çekerek gelen metne göre eşleştirme yapacak ve yine bu Json formatında veriyi yollayacaksınız ya da direk veritabanında arama yapacaksınız. Mesela aşağıdaki komutla hem 'a' ile başlayan ürünleri hem de kaç tane bulunduğunu bulabilirsiniz: 

"SELECT urun_basligi, COUNT(urun_basligi) AS sonuc_sayisi FROM urunler WHERE urun_basligi LIKE 'a%' group by urun_basligi

Bir de arama formun yollanacağı bir PHP dosyamızın olması gerekiyor. Formu get metodu ile yollayacağımız için aranan kelimeyi $_GET['arama'] ile alabiliriz. Bu kısmı size bırakıyorum. Uygulamayı kendi projenize uygulamanız için sunucu tarafında Json verisini nasıl oluşturacağınıza siz karar vermelisiniz.