Filed Under:  Joomla!, Joomla! 1.5

Joomla! 1.5 Kodlarına Giriş – 1

7th Şubat 2010   ·   7 Comments

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:

1
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.

1
2
3
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.

1
2
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.

1
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.

1
$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.

1
$mainframe->initialise();

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

1
JPluginHelper::importPlugin('system');

Bu kod ile system eklentilerini alıyoruz.

1
2
JDEBUG ? $_PROFILER->mark('afterInitialise') : null;
$mainframe->triggerEvent('onAfterInitialise');

Bu kod ile onAfterInitialise tetikleyici hareketlerini alıyoruz.

1
$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.

1
2
$Itemid = JRequest::getInt( 'Itemid');
$mainframe->authorize($Itemid);

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

1
2
JDEBUG ? $_PROFILER->mark('afterRoute') : null;
$mainframe->triggerEvent('onAfterRoute');

Bu kod ile onAfterRoute tetikleyicisinin hareketlerini alıyoruz.

1
2
$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.

1
2
JDEBUG ? $_PROFILER->mark('afterDispatch') : null;
$mainframe->triggerEvent('onAfterDispatch');

Bu kod ile onAfterDispatch tetikleyicisinin hareketlerini alıyoruz.

1
$mainframe->render();

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

1
2
JDEBUG ? $_PROFILER->mark('afterRender') : null;
$mainframe->triggerEvent('onAfterRender');

Bu kod ile onAfterRender tetikleyicisinin hareketlerini alıyoruz.

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

ve son kodumuz ile de cevap oluşturuyoruz.

Tags:  , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Readers Comments (7)

  1. denisdulici diyor ki:

    Soner hocam, benim bir sorum olacaktı. Şimdi $mainframe->route(); kısmına kadar ki tetikleyicileri kodumun içinde çalıştırdığımda Joomla! hayalen çalıştırılmış olacak mı?
    Yani benim istediğim şu, arka panelde iken bir butonla Joomla!’yı çalıştırmak. Böyle bir şey mümkün mü acaba? (URI olmadığı için olmaz gibime geliyor ama…)

  2. Soner Ekici diyor ki:

    Niye böyle bir düşüncen var? Yani neden arka panelden (yönetim kısmını diyorsun sanırım) bir butonla Joomlayı çalıştırmak istiyorsun? Ayrıca çalıştırmaktan kastın nedir? Joomla zaten çalışmıyor mu?

  3. denisdulici diyor ki:

    Çalıştırma isteyişim şu, bir SEF bileşenim var ve linklerin siteyi gezmeye gerek kalmadan oluşturulmasını istiyorum.
    Evet Joomla! çalışıyor ama $mainframe->_clientId = 1; yani admin konumunda.

    Aslında bu işlemi şöyle yapabiliyorum, $mainframe->_clientId = 0; yapıp Router’a URI’yi kendim manuel gönderdiğimde oluyor…

  4. Soner Ekici diyor ki:

    Bu durumu SEF bileşenini geliştiren arkadaşa sormak gerekiyor. Bana kalırsa Joomla 1.5 in kendi SEF desteği oldukça iyi.

  5. Denis Dulici diyor ki:

    Bileşenin geliştirici benim desem ayıp olmaz inşallah.
    Evet katılıyorum, SEF desteği oldukça iyi, özellikle 1.0′a göre ama yeterli değil.
    Özellikle URL ve yapısının yönetimi yok. Benim acizane geliştirdiğim AceSEF bileşeni sadece SEF değil aynı zamanda eşsiz bir SEO çözümüdür. Otomatik metadata üretimi, tek bir sayfadan tüm metadata’ların (otomatik üretilmemişse dahi) yönetimi, pluginlere ihtiyaç duymadan tüm bileşenler için Sitemap (XML) oluşturabilme ve sitemap’i Google Yahoo ve Binge ping etme, pingomatic gibi servislere URL’leri gönderme, yine pluginlere ihtiyaç duymadan tüm bileşenler için Tag sistemi (gelecek sürümde) ve bileşenin esnek yapısıyla onu SEO için eşsiz kılıyor. Kısacası AceSEF ile birlikte Joomla!’nın WordPress’in SEO’sundan tek eksiği Trackback kalıyor :)

  6. Soner Ekici diyor ki:

    Öncelikle tebrik ederim. Bizlerden de böyle geliştirici çıktığını görmek beni sevindirdi açıkçası :)
    AceSEF bileşenini incelemedim, SEF eklentilerinin çalışma prensiplerini pek bilmiyorum. Söylediğin şey yani otomatik SEF URL oluşturma mantıksal olarak bana imkansız gelmiyor. Biraz SEF bileşenlerinin kodlarını incelemem ve çalışma prensiplerini görmem lazım. Daha net bir bilgiyi o zaman verebilirim sanırım.

  7. aytugakar diyor ki:

    Evet Soner, çok başarılı bir bileşen yaptılar. İnşeallah aktif sitelerimizde kullanmaya başladığımızda gereken manevi desteği de vereceğiz.


Comments are closed.