Joomla! 1.5 Kodlarına Giriş (Bölüm 1)

Joomla!'nın şu andaki son serisi olan 1.5.x serisine ait kodların içerisine birlikte göz atalım.

Joomla!'nın şu andaki son serisi olan 1.5.x serisine ait kodların içerisine birlikte göz atalım.

Hatırlarsanız daha önceki Joomla! serisi olan 1.0.x için bir dizi yazı yazmış ve kodların içine dalmıştık. Sanırım aynı şeyi şimdi 1.5 serisi için yapmanın zamanı geldi. Joomla! 1.5 in kodlama ve hiyerarşik yapısını öğrenmek ilerleyen zamanlarda yapacağımız modül, bileşen ve botlar için oldukça faydalı olacaktır. Her zaman olduğu gibi öncelikle joomla sitemizin ana dosyası olan index.php içerisine bakmamız gerekiyor. Bildiğiniz gibi tüm kodlar ve komutlar öncelikle index.php içerisinden geçiyor. Dolayısıyla aslında joomla sitemizin değil joomlanın ana dosyası bence index.php oluyor. Kabaca Joomla! 1.5 dosya hiyerarşik yapısına baktığımız zaman Joomla! 1.0.x serisine göre daha düzenli ve kodlama yapısı olarak daha mantıksal işlevlerin hazırlandığını görmek mümkündür. Lafı fazla uzatmadan index.php dosyasını uygun bir yazı editörü ile açalım ve bakalım.

index.php:


define( '_JEXEC', 1 );



Hatırlarsanız Joomla! 1.0.x serisindeki index.php dosyamızda da buna benzer bir kod (define( ?_VALID_MOS?, 1 ); ) vardı ve bu sayede diğer tüm dosyaların index.php içerisinden çağırılması gerekliliğini belirtmiştik. Joomla! 1.5 serisi ile bunun adını artık değiştirip _JEXEC olarak kullanacağız.


define('JPATH_BASE', dirname(__FILE__) );

define( 'DS', DIRECTORY_SEPARATOR );



Burada iki tanımlama yapılıyor, JPATH_BASE ve DS. İlerleyen zamanlarda yapacağımız eklentilerde bunları bolca kullanacağız. Birinci tanımlama ile joomla sitemizin ana dizinini, ikinci tanımlama ile dizin ayracı olarak söyleyebileceğimiz bir işareti tanımlıyoruz. Buna örnek verecek olursak; anadizin/altdizin/sonrakidizin şeklindeki bir dizin tanımlamasını ilerleyen zamanlarda da göreceğimiz gibi anadizin?.DS.?altdizin?.DS.?sonrakidizin şeklinde yazacak ve sunucu taraflı oluşabilecek hataların önüne geçeceğiz.

Joomla! 1.0.x serisindeki index.php dosyamızda da önemli olan bazı dosyaları require_once komutuyla index.php içerisine almıştık. Aynı şekilde Joomla! 1.5.x serisinde de bu komutla önemli olan dosyalarımızı index.php içerisine alıyoruz.

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );

require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );


Gerekli olan includes klasörü içerisindeki iki dosyamızı; defines.php ve framework.php dosyalarını aldık. Bu dosyaları ve içeriklerini ilerleyen yazılarımda sizlerle paylaşacağım.


JDEBUG ? $_PROFILER->mark( 'afterLoad' ) : null;



Joomla! 1.0.x serisinde olduğu gibi 1.5.x serisinde de çeşitli triggerlar (tetikleyiciler) kullanarak bazı komutlardan önce başka komutları aralara sıkıştırabiliyorduk. index.php dosyası kodlarının altlarına doğru indikçe bu tetikleyicileri hep birlikte göreceğiz.


$mainframe =& JFactory::getApplication('site');



Bu kod ile site uygulamalarımızı oluşturuyoruz. İlerleyen yazılarımda sizlere JFactory sınıfını ve getApplication fonksiyonunu daha detaylı anlatacağım.


$mainframe->initialise();



Bu kod ile uygulamalarımızı dahil ediyoruz.


JPluginHelper::importPlugin('system');



Bu kod ile system eklentilerini alıyoruz.


JDEBUG ? $_PROFILER->mark('afterInitialise') : null;

$mainframe->triggerEvent('onAfterInitialise');



Bu kod ile onAfterInitialise tetikleyici hareketlerini alıyoruz.


$mainframe->route();



Yukarıdaki kodlarda JFactory sınıfının getApplication fonksiyonu ile sitemizin uygulamalarını oluşturmuş ve bunu $mainframe değerine dahil etmiştik. Şimdi bu uygulamalar için bir yol belirliyoruz. Yani sitemizin adres satırındaki SEF desteğini aktive etmiş oluyoruz.


$Itemid = JRequest::getInt( 'Itemid');

$mainframe->authorize($Itemid);



Bu kodlar ile Itemid değerini alıp bunu uygulamalarımız için yetkilendiriyoruz.


JDEBUG ? $_PROFILER->mark('afterRoute') : null;

$mainframe->triggerEvent('onAfterRoute');



Bu kod ile onAfterRoute tetikleyicisinin hareketlerini alıyoruz.


$option = JRequest::getCmd('option');

$mainframe->dispatch($option);



Bu kod ile uygulamalarımızı $option değerine sevk ediyoruz. Böylece uygulamalarımız $option değeri ile tanımlanacaklar.


JDEBUG ? $_PROFILER->mark('afterDispatch') : null;

$mainframe->triggerEvent('onAfterDispatch');



Bu kod ile onAfterDispatch tetikleyicisinin hareketlerini alıyoruz.


$mainframe->render();



Uygulamalarımızı $mainframe içerisine dahil etmiştik. render() fonksiyonu ile uygulamalarımızı gösteriyoruz.


JDEBUG ? $_PROFILER->mark('afterRender') : null;

$mainframe->triggerEvent('onAfterRender');



Bu kod ile onAfterRender tetikleyicisinin hareketlerini alıyoruz.


echo JResponse::toString($mainframe->getCfg('gzip'));



ve son kodumuz ile de cevap oluşturuyoruz.
  • Etiketler;
Soner Ekici
1981 yılında Denizli' de doğdu. 1999 yılında başladığı PHP ve MySQL çalışmalarına 2004 yılında Joomla! ile devam etti. Joomla! için çeşitli eklentiler kodladı. <p>Halen Joomla! için aktif olarak eklentiler kodlayan Soner Ekici Afyonkarahisar ili Şuhut ilçesinde pratisyen hekim olarak görev yapmaktadır.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git