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

Bu yazı dizisi ile joomla 1.0.x sürümünün kodlarına giriş yaparak kendimizi joomla konusunda daha çok geliştirmeye çalışacağız.

Bu yazı dizisi ile joomla 1.0.x sürümünün kodlarına giriş yaparak kendimizi joomla konusunda daha çok geliştirmeye çalışacağız.

Öncelikle ilk dosyamız olan ve ana dizinde bulunan index.php yi incelemeyle joomla kodlarına giriyoruz.

İlk satırından itibaren aşağılara doğru inmeye başladığımızda karşımıza çıkan ilk kod;


define( '_VALID_MOS', 1 );



Bu kod ile sitemizin diğer dosyalarının her birisinde bulunan;


defined( '_VALID_MOS' ) or die( 'Restricted access' );



kodunun tanımlamasını yapıyoruz. Böylece diğer joomla dosyalarının ancak ve ancak index.php içerisinde çağırıldığında çalışması gerektiğini belirterek ilk güvenlik önlemimizi alıyoruz.

Daha sonra karşımıza gelen kod satırı ise şöyle;


if (!file_exists( 'configuration.php' ) || filesize( 'configuration.php' ) < 10) {

        $self = rtrim( dirname( $_SERVER['PHP_SELF'] ), '/' ) . '/';

        header("Location: http://" . $_SERVER['HTTP_HOST'] . $self . "installation/index.php" );

        exit();

    }



Bu kodu anlatmak gerekirse; "eğer configuration.php dosyası yok ise veya dosyanın boyutu 10 byte tan küçük ise (ki bu dosyanın hatalı olduğu anlamına gelir) bizi installation/index.php dosyasına götür" demek oluyor ki joomla bizi kurulum sayfasına götürüyor.

Daha sonraki kod ise;


require( 'globals.php' );

    require_once( 'configuration.php' );



gerekli olan 2 önemli dosyayı globals.php yi (ki ilerleyen yazılarımda bu dosyayı da anlatacağım) ve elbette sitemizin tüm yapılandırmasının bulunduğu configuration.php dosyasını index.php içerisine aktarıyor.


$http_host = explode(':', $_SERVER['HTTP_HOST'] );

    if( (!empty( $_SERVER['HTTPS'] ) && strtolower( $_SERVER['HTTPS'] ) != 'off' || isset( $http_host[1] ) && $http_host[1] == 443) && substr( $mosConfig_live_site, 0, 8 ) != 'https://' ) {

        $mosConfig_live_site = 'https://'.substr( $mosConfig_live_site, 7 );

    }



bu kod ise sitemizin https desteğini sağlar. Bu koddan sonra gelen ve joomla için en can alıcı kısım;


require_once( 'includes/joomla.php' );



bu kod ile joomlanın birçok temel fonksiyonlarını barındıran joomla.php yi index.php içerisine aktarıyoruz. joomla.php dosyası includes klasörü içerisinde bulunur ve eğer joomla için birşeyler kodlayacaksanız, php bilginiz orta düzeyde ise ve bazı kodlamalarda kolaylık istiyorsanız bu joomla.php yi mutlaka detaylı olarak incelemenizi tavsiye ederim.

Bu önemli koddan sonra gelen satır ise;


if (file_exists( 'installation/index.php' ) && $_VERSION->SVN == 0) {

        define( '_INSTALL_CHECK', 1 );

        include ( $mosConfig_absolute_path .'/offline.php');

        exit();

    }



joomla kurulum dosyalarının bulunup bulunmadığına, eğer bulunuyor ve kurulan site demo sitesi gibi bir site değil ise ($_VERSION->SVN ile sitenin bir demo sitesi mi yoksa normal bir site mi olduğunu belirleriz ve bu değer includes/version.php içerisinden değiştirilebilir.) offline.php ile sitemizin kapalı konuma geçirir.

Daha alt satırlara indiğimizde;


if ($mosConfig_offline == 1) {

        require( $mosConfig_absolute_path .'/offline.php' );

    }



bu kodu görüyoruz. Bu kod eğer sitemiz kapalı ise offline.php ile sitemizin kapalı konuma geçmesini belirtir.

Buraya kadarki kodlardan da anlaşılacağı üzere sitemize çeşitli durumlarda çeşitli dosyalar yardımı ile bazı özellikler kazandırdık. Bundan sonraki satırlarda genellikle bu özelliklerin kullanımı ile ilgili bazı kodlar yer alacaktır.


$_MAMBOTS->loadBotGroup( 'system' );



bu satır ile sitemize system grubundaki mambotları aktarıyoruz. Örneğin Joomfish bileşeninin system botu gibi...


$_MAMBOTS->trigger( 'onStart' );



Bu satır ile joomlaya "onStart" eyleminde çalışması gereken mambotları aktarıyoruz. Henüz joomla sitemiz görüntülenmeye bile başlamadı. Eylemin adından da anlaşılacağı üzere "tam başlangıçta" yız.

Sitemize SEF desteği verilen satırlar;


if (file_exists( $mosConfig_absolute_path .'/components/com_sef/sef.php' )) {

        require_once( $mosConfig_absolute_path .'/components/com_sef/sef.php' );

    } else {

        require_once( $mosConfig_absolute_path .'/includes/sef.php' );

    }



ile belirtiliyor. Eğer sitemizde bir com_sef bileşeni (OpenSEF gibi) kullanıyorsak joomla bunu kullanacak, yok eğer bir bileşen kullanmıyorsak joomla kendi sef.php sini kullanacaktır.

Sitemizin açılış sayfasını yavaştan oluşturmaya başlıyoruz.


require_once( $mosConfig_absolute_path .'/includes/frontend.php' );



bu satır ile sitemizin ana sayfasını oluşturuyoruz. frontend.php dosyası ile sitemizin ...etiketini ve kullandığımız temadaki modül pozisyonlarına bağlı olarak kullanılan modülleri yüklüyoruz.


$option = strval( strtolower( mosGetParam( $_REQUEST, 'option' ) ) );

    $Itemid = intval( mosGetParam( $_REQUEST, 'Itemid', null ) );



    if ($option == '') {

        if ($Itemid) {

            $query = "SELECT id, link"

            . "n FROM #__menu"

            . "n WHERE menutype = 'mainmenu'"

            . "n AND id = " . (int) $Itemid

            . "n AND published = 1"

            ;

            $database->setQuery( $query );

        } else {

            $query = "SELECT id, link"

            . "n FROM #__menu"

            . "n WHERE menutype = 'mainmenu'"

            . "n AND published = 1"

            . "n ORDER BY parent, ordering"

            ;

            $database->setQuery( $query, 0, 1 );

        }

        $menu = new mosMenu( $database );

        if ($database->loadObject( $menu )) {

            $Itemid = $menu->id;

        }

        $link = $menu->link;

        if (($pos = strpos( $link, '?' )) !== false) {

            $link = substr( $link, $pos+1 ). '&Itemid='.$Itemid;

        }

        parse_str( $link, $temp );

        /** this is a patch, need to rework when globals are handled better */

        foreach ($temp as $k=>$v) {

            $GLOBALS[$k] = $v;

            $_REQUEST[$k] = $v;

            if ($k == 'option') {

                $option = $v;

            }

        }

    }

    if ( !$Itemid ) {

    // when no Itemid give a default value

        $Itemid = 99999999;

    }



bu uzun satırlar ile sitemizde kullanılan 2 önemli değeri $option ve $Itemid değerini belirliyoruz.

Buraya kadar olan bölümde modüller, açılış sayfası ve açılışta kullanılacak mambotları sitemize aktardık. Şimdi ise sitemizin ana temelini oluşturan ziyaretçi bilgilerini oluşturalım ve gerekli bilgileri hem veritabanına işleyelim hem de global olarak belirtelim.


$mainframe = new mosMainFrame( $database, $option, '.' );

    $mainframe->initSession();



bu satırın içerisinden de anlaşılacağı üzere sitemizin ana çerçevesini oluşturduk. Oturum durumunu initSession fonksiyonu ile belirledik. initSession fonksiyonu ilerde de anlatacağım üzere includes/joomla.php içerisinde bulunan bir fonksiyon olup siteye giren bir kişinin oturumunu oluşturur. Böylece ilerde bu kişi siteye giriş yapmak isterse oluşturulan bazı bilgileri kullanma fırsatımız olacak.



$_MAMBOTS->trigger( 'onAfterStart' );



bu satırın içerisinden de anlaşılacağı üzere "başlangıçtan sonra" aktarılacak mambotları siteye aktarıyoruz.
  • Etiketler;
Soner Ekici
1981 yılında Denizli' de doğdu. 1999 yılında başladığı PHP ve MySQL çalışmalarına 2004-2011 yılları arasında Joomla! ile devam etti. Joomla! için çeşitli eklentiler kodladı, eğitimler düzenledi. Halen PHP ve MySQL ile çalışmalara devam etmektedir.
Yorum Yaz

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

teşekkürler çok güzel ama benim bilgisayarımdaki joomla 1.5 var yani bu bilgi işe yaramaz
teşekkürler
hem açık kodlama diyoruz hem olanca uzun güvenlik tedbirleri alıyoruz bu kadar uzun uzadıya kodlar kullanma yerine daha kısa kodlarla daha pratik yazılabilir mi veya böyle iys ler mevcutmu

Yukarı Git