Jul 3 2009

CF AJAX vs Google Suggest :O

Gönderen : Candan Bilecen (3:57 PM)
3 yorum
- Kategori : Coldfusion | Javascript | Ajax

CfCube.com

Google Suggest :Yapılması gereken basit bir şey aslında kullanıcı TextBox’a her harf girişinde veritabanına bir sorgu göndererek o harfin, birkaç harften sonra kelimenin benzerlerinin veritabanında olup olmadığını varsa da bunların bir listesini TextBox’ımızın hemen altında göstericez.Kullanıcı listeden bir kelimenin üzerine geldiğinde o kelimeyi TextBox’ımızda göstericez. Eğer hiç benzer kelime yoksa o zaman listemizi saklıyıcaz gösterdiğimiz listeden seçim yapıldı ise listemizi tekrar gizliyicez belirlediğimiz bu kurallar doğrultusunda kodumuzu yazalım.. Normalde bu işlem veritabanını fazlasıyla yorucaktır yapılması gereken benzer kayıtlarnı 1 kez çekilip dizi üzerinden listelenmesidir.

Special Thanks Mr. Mahmut :)

 

İlk önce ara.cfm adında bir sayfa oluşturalım.

 

<html>

<head>

<cfajaximport>

<script>

            function gizle()

            {         

                         ColdFusion.Window.hide("p2"); //penceremizi gizliyoruz

            }

            function goster()

            {         

                         ColdFusion.Window.show("p2"); //penceremizi gösteriyoruz.

            }

            function aktar(kelime)

            {

                        if(kelime.length>0)

                        {

                                   document.getElementById("ara").value = kelime; // öneriler.cfm den gelen veri varsa TextBoxımıza aktarıyoruz.

                        }

            }

    function formuGonder() {

        ColdFusion.Ajax.submitForm('kelimeForm', 'oneriler.cfm', sonuc,

            hata); // kelimeForm içerisindeki verileri öneriler.cfm sayfasına gönderip öneriler.cfm’den dönen verileri sonuc fonksiyonuna gönderiyoruz

    }

    function sonuc(text)

    {

                        document.getElementById("sonuclar").innerHTML = text; //öneriler.cfm sayfasında yazan tüm bilgileri alıyoruz ve sonuclar isimli div'imize yazdırıyoruz bu divimiz p2 adlı cfwindow penceremizin içinde böylece önerilerimizi istediğimiz zaman gösterip gizleyebiliyoruz.

                       

                        if(text.length>1) //eğer dönen bilgi uzunluğu 1den büyükse demekki önerilen kelimelerimiz var yani penceremizi gösterebiliriz.

                                   goster();

else // 1'den büyük değilse demekki elimizde hiç önerimiz yok o zaman penceremizi gizliyoruz

                                   gizle();

    }

    function hata(code, msg) // hata fonksiyonu

    {

        alert("Hata!!! " + code + ": " + msg);

    }

</script>

 

</head>

<body>

 

<cfform name="kelimeForm">

        <cfinput name="ara" type="text" onKeyUp="javascript:formuGonder();" ><!---Klavyeden her giriş yapıldığında veritabanımızda benzer veriler olup olmadığını kontrol ettiriyoruz--->

</cfform>

 

<cfwindow name="p2" title="Benzer Sonuçlar" closable="true" draggable="false" resizable="true" x=10 y=35 width="150" height="170">

<div id="sonuclar"></div><!---Her giriş yapıldıktan sonra eğer öneri var ise divimizin içine yazdırıyoruz.--->

</cfwindow>

 

<br><br><br><br><br><br><br><br><br><br><br>

 

<!---Kontrol edeceğimiz ad için ColdFusion içerisinde standart olarak bulunan cfArtGallery veritabanını kullanıyorum ve kontrol edebilmemiz için verileri listeliyorum --->

 

<cfdbinfo type="tables" datasource="cfartgallery" name="dbdata"><!---cfartgallery içersindeki tabloların adlarını alıyoruz--->

<cfquery name="artistler" datasource="cfArtGallery"><!---cfartgallery içersindeki artists tablosundaki verileri alıyoruz--->

            select * from artists

</cfquery>

cfartgallery içersindeki tablo isimleri :

<br>

<cfdump var="#dbdata#">

<br>

artists tablosundaki veriler :

<br>

<cfdump var="#artistler#">

 

</body>

</html>

 

ara.cfm girilen veriyi sorgulaması için oneriler.cfm sayfasına gönderecek bu sayfada veritabanında sorgulamamızı yaptıktan sonra var olan verileri yeniden ara.cfm’e döndürücez.oneriler.cfm sayfamızı oluşturalım.

 

<!---Veritabanına sorguyu gönderdikten sonra veri olması halinde ilk 5 kaydı listeleyerek linkliyoruz.--->

<cfquery name="kelimeler" datasource="calisma">

            select ad from tablo1 where ad like '%#form.ara#%'

</cfquery>

<cftry>

            <cfif kelimeler.recordcount GT 0>

        <cfloop query="kelimeler" endrow="5">

                    <a onClick="gizle();" onMouseOver="aktar('<cfoutput>#kelimeler.firstname#</cfoutput>');"><cfoutput>#kelimeler.firstname#</cfoutput></a><br> 

        </cfloop>

    </cfif>

<cfcatch>

</cfcatch>

</cftry>

 

 

Artık Google Suggest benzeri sayfamız kullanıma hazır..

Yorumlar

Mahmut Çifçi

Mahmut Çifçi yazdı : 07/30/09 9:32 PM

Emeğinize sağlık,çok güzel bir örnek olmuş.
Candan Bilecen

Candan Bilecen yazdı : 07/31/09 3:51 PM

Sağolun fırsat buldukça popüler olan örnekleri eklemeye çalışıcam..
ilhan aksu

ilhan aksu yazdı : 08/26/09 5:39 PM

aşağıdaki satırı anayamadım

ColdFusion.Ajax.submitForm

bu kod sayfayı nasıl gönderiyor yani asenkron olarak ve geri dönene değeri nasıl yakalıyor Acaba .bu coldfusion için özel bir fonksiyon mu ? Yani XMLHHTPRequest nesenesi falan oluşturlumuyor hiç

Yorumunuzu YazInIz



(daha sonra görüntülenmeyecek)