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

CaptainSalvador

Adanmış Üye
17 Eki 2014
6,073
15
Teşkilat
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.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.