Jquery

jQuery Autocomplete Kullanımı

 

jQuery UI kütüphanesinin en güzel özelliklerinden bir tanesi de “autocomplete” özelliğidir. AJAX isteklerini klavyeden bir kaç tuşa basarak otomatik bir şekilde tamamlamaya yardımcı olur. Bu özelliği kullanmanın en kolay yolu mevcut bir JSON dosyası olmasına rağmen, gerçekte verilerin bir veri tabanından gelmesini isteriz. Mevcut autocomplete örneğinde de verileri bir veri tabanından çekip ekrana dökülecektir.

jQuery UI AutoComplete örneğinini yapmaya başlamadan önce nasıl bir işlem yapılacağını açıklayalım.

Öğrencilerin bilgilerinin olduğu bir mySql tablomuzun olduğunu varsayalım. Bu tabloda öğrencilerin numara, ad, soyad, cinsiyet, sınıf ve doğum tarihi bilgileri kaydedilmektedir. Hazırlayacağımız formda öğrencinin adı yada soyadı ile ilgili bir şey girdiğimizde ekrana ilişkili kayıtların listelenmesini sağlayacağız.

 

MySQL Tablosunun Tasarımı

Şekildeki bilgilere uygun olarak tabloyu aşağıdaki gibi tasarlıyoruz.

DDL Komutları

DML Komutları

(not: örneği hazırlarken cinsiyet yerine cisiyet yazmışım tanımsız hatası veriyor. Programın çalışmasına engel değil)

HTML  Kodlarının Yazımı

Formdaki #SorguInput nesnesi arama yapmak için kullanacağımız text kutusunu ifade ediyor. Arama sonucundan gelen kayıtlardan seçim yapılası durumda, aktif olan öğrenin ekleneceği bölüm #ogrenci-liste alanını ifade ediyor.

PHP Kodlarının Yazımı

Autocomplete, text kutusunda arama başlatıldığında sunucuya term isimli url parametresini göndermektedir.  Göderilen parametre ile geriye JSON tipinde id, value ve label isimli özelliklere sahip bir veri kümesi dönmektedir. Yukarıda oluşturulan veritabanındaki verileri uygun şekilde çekmek için term paremetresi ile ad yada soyad ile eşleşen kayıtları alıp foreach döngüsü içinde id, value ve label isimlerine sahip yeni bir dizi oluşturuyoruz.

Burada dikkat edilmesi gerek küçük bir noktayı bahsetmek istiyorum. Form ekranında gösterilen liste değerleri label içindeki verileri, value seçim yapıldıktan sonra text kutusu içindeki değeri gösterecektir. Tüm satırdaki verileri getirmek için ekranda görünmeyen id değerini kullanmayı tercih ettim. İkinci bir AJAX işlemi yapmamak için bu şekilde bir tercihte bulundum.

Dizi oluşturulup içine değerler foreach ile eklendikten sonra JSON formatına çevirip ekrana yazdırma işlemi yaparak PHP ile yapılacakları bitirdim.

 

JavaScript Kodlarının Yazımı

Tüm işlemler jQuery yüklendiğinde gerçekleşeceği için tüm javascript kodlarını jquery yüklendi metodunun içine yerleştirerek yazıyoruz.

 

Bölüm 1: Bu bölümde autocomplete nesnesinin nasıl kullanıldığına bakalım.  Liste nesnesinin kullanımı yazının devamında açıklanacaktır.

source: Bu kısmında veritabanından okuma yılacak olan server dosyasını gösteriyoruz.

minLength: en az kaç karakter olduğunda işlem aramaya başlayacağını ifade ediyoruz.

focus: Çekilen liste üzerinde fare ile gezinmeye başladığımızda neler yapılacağını ifade ediyor.

select: Çekilen listedeki nesnelerden her hangi birine tıkladığımızda yani seçim yapıldığında ne olacağını fonksiyona yazacağız.

close: Seçim yapıldığında liste kapandığında yapılacak işlemler bu fonksiyon arasına yazılacaktır.

Yukarıdaki kodda en önemli kısım seçim yapıldığında neler yapılacağını anlatacağımız select fonksiyonunun içidir.   Listeden çekilen veri ui parametresine item özelliği olarak eklenmektedir.

Eklenen item içinde de AJAX ile çekilen verinin id,labal ve value değerleri tutulmaktadır.

 

Bölüm 2: Seçim yapıldığında öğrenci adında bir nesneye ui ile gelen item.id değerini parametre olarak gönderip yeni bir öğrenci oluşturacağım. Oluşturduğum öğrenciyi de yine tüm öğrencilerin kaydını tutmak için oluşturduğum liste adında başka bir nesneye gönderip öğrencinin eklenmesini sağlayacağım. Öğrenci listeye eklendiğinde yine bu listenin bir metodunu çağırıp ekranın doldurulmasını sağlayacağım. ogrenciListe nesnesinin bir örneğini oluşturmak için autocomplete çağrıladan önce var ogrenciListe=new Liste(); yazarak yeni liste oluşturduğumu belirteyim.

 

Bu yaptığım açıkalamlardan sonra select fonksiyonu aşağıdaki gibi oluşacaktır.

 

Bölüm 3: Örneğin en zor kısımına geldik. Ogrenci ve Liste nesnelerini oluşturuyoruz.

Ogrenci Sınıfı

 

Liste Sınıfı

Ogrenci nesesinde pek birşey olmamasına rağmen, liste içinde bir hayli fonksiyon ve özellik dikkatinizi çekmiştir. Adım adım neler yaptığımızı açıklayalım.

this.ogrenciler: listeye eklenen öğrencileri bu dizi içinde tutacağım.

this.ogrenciEkle: Listeye öğrenci daha önce eklenmediyse ekleme işlemini gerçekleştirecek fonksiyon.  Listede öğrencinin olup olmadığını ogrno ile kontrol edip listeye öğrenciyi ekliyor.

this.getir: Her hangi bir yerde kullanmadım fakat test aşamasında lazım olduğu için yazmıştım.

this.ogrenciSil: Gönderilen öğrenci numarasına göre öğrenci silme işlemini gerçekleştiriyor. Silme işlemi için Array sınıfına remove adında ek bir fonksiyon ekledim. Eklenen fonksiyonun kodları aşağıda mevcuttur.

this.htmlGuncelle:  for döngüsü ile this.ogrenciler içindeki tüm elemanları htmlEkle metodu yardımı ile ekrana yerleştiriyor.

this.htmlEkle: İçeriği çok fazla dolu olduğu için içime pek sinmeyen fonksiyon fakat daha kısa olması için template yapmak gerekirdi. Neyse kodun amacını açıklayayım. Bootstrap tasarımı için bir tane öğrenci kartı oluşturuyor. Oluşturulan öğrenci kartını da son satırda #ogrenci-liste içine ekliyor.

 

Array.remove fonksiyonu

 

Bölüm 4: Öğrencileri kaldırmak için ekleme yapılırken .kaldir adınca class değerini sil butonuna ekledim.  .kaldir adındaki butona tıklandığında yine aynı butona data-id nesnesi olarak eklenen ogrno değeri yardımı ile ogrenciSil fonksiyonuna öğrencinin numarasını gödererek öğrencinin silinmesini sağlıyorum.

 

Sayfalarda kullanılan kodlar

index.html

 

sorgu.php

 

 

 

Yorum Yap