Pazar, 8 Şubat 2009

CodeIgniter'da JQuery Kütüphanesi Yazmak

 

CodeIgniter, paket kütüphanelerinin yanı sıra kullanıcının yazacağı kendi kütüphanelerini de kabul etmektedir. Bu yazıda CodeIgniter ile Javascript uygulama çatısı Jquery'in birlikte çalışması için kendimize ait bir kütüphane yazacağız.

Kendi yazdığımız kütüphanelerimizi applicaiton/libraries dizini altına yükleyeceğimiz için önce bu dizin altına jquery.php isimli bir dosya açıyoruz. Dosyayı düzenlemek için bir editör programda açıp ilk satırına aşağıdaki cümleyi ekliyoruz :

 
if (!defined('BASEPATH')) exit('No direct script access allowed');

Bu cümle ile birlikte dışarıdan gelecek bir saldırıda kütüphanemizin çalışmasını engellemiş oluruz. Kendi yazacağımız her türlü CodeIgniter kütüphanesi için ilk iş bu satırı eklemek olmalıdır. Ancak, bu satır model, view ve controller dosyalarında olmamalıdır.

Daha sonra kütüphanemizin adının olduğu sınıfı yaratıp, içinde kullanacağımız sabitleri birer değişken ismini atıyoruz:

 
class Jquery{

    var $jquery_file = 'assets/js/jquery-1.2.6.js';
    var $newline = "\n";
    var $tab = "\t";

Burada $jquery_file değişkeninde JQuery'in kullandığımız versiyonunun bulunduğu dizini tanımlıyoruz. Diğer değişkenler de sırasıyla, yeni satır ve tab değişkenleridir.

JQuery kütüphanesi çalıştırıldığında CodeIgniter tarafından kontrol edilecek ilk sınıf kütüphanenin kendi adı ile olan sınıfı, yani JQuery metodudur. Bu metodta, JQuery sınıfı çalıştırılarak kayıtlara (log) sınıf ile ilgili mesajlar gönderilir. Eğer tanımlanan dizinde JQuery dosyası bulunamadıysa hata mesajı olarak ekrana ve kayıtlara bilgi verilir.

 
    function JQuery(){
        $this->obj =& get_instance();
        log_message('debug','JQuery Kütüphanesi '.get_class($this->obj).' sınıfı ile başlatıldı');
        $this->obj->load->helper('url');

        if (!file_exists($this->jquery_file)) {
            log_message('error','jquery dosyası ' . $jquery_location.' adresinde bulunamadı.');
            show_error('jquery dosyası ' . $jquery_location.' adresinde bulunamadı.');
        }
    }

Kütüphanemizi başlatmak için başlangıç metoduna ihtiyacımız olduğu için init() metodunu tanımlıyoruz:

 
   function init()
    {
        return '' . $this->newline;
    }
    
Kütüphanemizde son olarak yapacağımız iş, kullanacağımız değişik scriptler için amaca uygun kod parçaları yazmak olacak. Örneğin JQuery içinde kullanacağınız yazı editörü JWYSIWYG için yazacağınız metod aşağıdaki gibidir. Bu metodta yer alan değişkenler sizin dosya kurulumunuza göre değişecektir:
 
	function wysiwyg()
	{
		$output =	'
			 		
			
			
		' . $this->newline;
		return $output;	
	}

Kütüphanemiz ihtiyacınıza göre zenginleştireceğiniz metodlar ile gelişebilir. Ancak şimdilik bu kadar olduğunu düşündüğümüz kütüphanemizi nasıl yükleyip çağıracağımızı anlatalım. Kütüphanemizi çalıştırmak istediğimiz controller dosyasının içinde, ilgili metoda aşağıdaki kod parçasını yazmamız, kütüphaneyi çağırmamız için yeterlidir:

 
class Item extends Controller {

 function Item()
 {
  parent::Controller(); 
 }
 function index()
 {
  $this->load->library('jquery');
  $data['extraHeadContent'] = $this->jquery->init().$this->jquery->wysiwyg();
 }

Benzer şekilde JQuery için yazılmış bu kütüphaneyi diğer Java uygulama çatıları için de kendiniz geliştirebilirsiniz.

Yorumlar

Dosyayı düzenlemek için bir editör programda açıp ilk satırına aşağıdaki cümleyi ekliyoruz : demissin altina if (!defined('BASEPATH')) exit('No direct script access allowed'); eklemeyi unutmussun

Sağol Onur. Düzelttim hatayı.

ilk paragrafta;
".....Java uygulama çatısı Jquery'in ......"
demişsiniz.  sanırım gözünüzden kaçmış, "javascript" olacak.

sağol ibrahim. düzelttim teşekkürler.

Teşekkür ederim üstadım çok güzel bir makale olmul ellerine sağlık.

jquery'yi bu şekilde kullanmanın view dosyaları içinde kullanmaya göre bir avantajı var mı?

@Muhittin: Bu şekilde kullanarak tek bir merkezde topluyoruz kodlarımızı. Böylece değiştirmek gerekirse tek tek diğer View dosyaları yerine bu dosyadan değiştiriyoruz. Bu da büyük projelerde bize avantaj sağlıyor.

Yorum Ekle