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

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 makalemizde joomla ana dizinindeki index2.php dosyasından ve index2.php nin index.php den ayrılan en önemli 2 özelliğinden bahsedeceğiz. Bunlardan bir tanesi do_pdf yani içeriği pdf formatına dönüştürme, diğeri ise içeriği temadan bağımsız gösterebilmedir. index2.php nin index.php den ayrılan özelliği sitemizdeki herhangi bir sayfayı sitemizdeki modüllerden bağımsız, daha doğrusu modül pozisyonları olmadan gösterebilmemizdir. Örneğin;

http://www.siteadresi.com/index.php?option=com_content&task=view&id=247

Bu adrese baktın ve daha sonra index.php yazan yeri index2.php olarak değiştirip tekrar bakın;

http://www.siteadresi.com/index2.php?option=com_content&task=view&id=247

Umarım aradaki farkı anlamışsınızdır.

Şimdi gelin hep birlikte index2.php dosyasını açalım ve teker teker kodları incelemeye başlayalım.


define( '_VALID_MOS', 1 );



Bu kod ile index.php de olduğu gibi bu dosyanın ana dosya olduğunu belirtip ilk basit güvenlik önlemimizi alıyoruz.


require( 'globals.php' );

    require_once( 'configuration.php' );



Bu kod ile gerekli olan 2 dosyayı index2.php dosyasına aktarıyoruz.


$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 ile sitemizde SSL kullanacaksak onun desteğini sağlıyoruz.


require_once( 'includes/joomla.php' );



Bu kod ile sitemizde kullanacağımız temel ve gerekli birçok joomla sınıf (Class olarak geçer) ve fonksiyonunu (Function olarak geçer) aktarıyoruz.


if ($mosConfig_offline == 1) {

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

    }



Sitemiz kapalıysa offline.php yi gösteriyoruz.


$_MAMBOTS->loadBotGroup( 'system' );



Sistem grubundaki mambotları aktarıyoruz.


$_MAMBOTS->trigger( 'onStart' );



Başlangıçta çalışacak mambotları çalıştırıyoruz.


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' );

    }



Bu kod ile eğer 3. parti dediğimiz joomlanın kendi yapısında olmayan bir SEF bileşeni varsa onu yoksa joomlanın kendi SEF desteğini aktarıyoruz.


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



Bu kod ile modüllerimizi, sayfamızın ...etiketini ve o sayfadaki bileşeni aktarıyoruz.


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

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

    $no_html     = intval( mosGetParam( $_REQUEST, 'no_html', 0 ) );

    $act         = strval( mosGetParam( $_REQUEST, 'act', '' ) );

    $do_pdf     = intval( mosGetParam( $_REQUEST, 'do_pdf', 0 ) );



Bu kodlar ile çeşitli değerleri belirliyoruz. Burada kullandığımız mosGetParam fonksiyonuna dikkat etmenizi öneririm. mosGetParam ile kolayca bir yerden gönderilen bir değeri alabiliriz. Genelde $deger = $_GET['deger']; tarzında bir kod kullanmaktansa mosGetParam ile bir değeri çekmek her zaman güvenlidir. Bunu daha da güvenli hale getirmek için intval ve strval fonksiyonlarını kullanıyoruz. intval integer value olup türkçe karşılığını rakamsal değer olarak çevirebiliriz. strval ise string value olup sıra değeri diye çevirebiliriz. Bu satırlarda dikkat etmemiz gereken diğer bir nokta ki bu nokta bence kodlamacı arkadaşlar dışında diğer arkadaşlara da yararlı görünüyor, no_html ve do_pdf değerleridir.

Bu değerleri makalemizin sonuna doğru örneklerle açıklayacağım. Böylece bu 2 güzel değerin aslında bazen ne kadar işimize yaracağını öğrenmiş olacağız.


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

    $mainframe->initSession();



Bu kodlar ile birçok çekirdek fonksiyonunu index2.php içerisine alıyoruz. Oturumu oluşturuyoruz.


$_MAMBOTS->trigger( 'onAfterStart' );



Bu kod ile başlangıçtan hemen sonraki mambotları çalıştırıyoruz.


$my = $mainframe->getUser();



index.php dosyasını anlatırken bahsettiğim gibi siteye gelen kişinin tüm bilgilerini veritabanından alıp hepsini $my değerinin içerisine koyuyoruz.


if ($mosConfig_lang=='') {

        $mosConfig_lang = 'english';

    }

    include_once( $mosConfig_absolute_path .'/language/' . $mosConfig_lang . '.php' );



Bu kod ile eğer tanımlanmamış ise varsayılan olarak ingilizceyi yok tanımlanmışsa tanımlanan dili sitemize aktarıyoruz.


if ($option == 'login') {

        $mainframe->login();

        mosRedirect('index.php');

    } else if ($option == 'logout') {

        $mainframe->logout();

        mosRedirect( 'index.php' );

    }



Bu kod ile eğer sitemizi ziyaret eden kişi giriş yapıyorsa $mainframe->login(); ile giriş yapmasını yok eğer siteden çıkış yapıyorsa $mainframe->logout(); ile çıkış yapmasını sağlıyoruz ve mosRedirect fonksiyonu ile sitemizin ana sayfasına yönlendiriyoruz.


if ( $do_pdf == 1 ){

        include $mosConfig_absolute_path .'/includes/pdf.php';

        exit();

    }



Bu kod ile gösterdiğimiz içeriği pdf formatına getirmemize yarayan ve includes klasörü içerisinde bulunan pdf.php dosyasını aktarıyoruz. Bu kodun detaylarını yukarıda söylediğim gibi makalenin sonunda bahsedeceğim.


$mainframe->detect();



Bu kod ile sitemize giren kişinin tarayıcı bilgileri, ip adresi gibi çeşitli bilgilerini veritabanına kaydediyoruz. İstatistik tutmak amacıyla kullanılan bir fonksiyon olup eğer istatistikleri genel yapılandırmadan açarsanız bu fonksiyon çalışmaya başlar.


$gid = intval( $my->gid );



Bu kodu index.php yi anlatırken uzunca bahsetmiştim. Tekrar söylemek gerekirse siteye gelen kişinin üyelik seviyesini belirliyoruz. 0,1,2 olmak üzere 3 seviyeden oluşur.


$cur_template = $mainframe->getTemplate();



Kullanılan temayı aktarıyoruz.


require_once( $mosConfig_absolute_path . '/editor/editor.php' );



Kullanılan metin editörünü aktarıyoruz.


ob_start();



    if ($path = $mainframe->getPath( 'front' )) {

        $task     = strval( mosGetParam( $_REQUEST, 'task', '' ) );

        $ret     = mosMenuCheck( $Itemid, $option, $task, $gid );

        if ($ret) {

            require_once( $path );

        } else {

            mosNotAuth();

        }

    } else {

        header("HTTP/1.0 404 Not Found");

        echo _NOT_EXIST;

    }

    $_MOS_OPTION['buffer'] = ob_get_contents();



    ob_end_clean();



    initGzip();



    header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );

    header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );

    header( 'Cache-Control: no-store, no-cache, must-revalidate' );

    header( 'Cache-Control: post-check=0, pre-check=0', false );

    header( 'Pragma: no-cache' );



    // display the offline alert if an admin is logged in

    if (defined( '_ADMIN_OFFLINE' )) {

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

    }



Bu uzun kodları index.php yi anlatırken bahsettiğim için geçiyorum.


if ( $no_html == 0 ) {

        $customIndex2 = 'templates/'. $mainframe->getTemplate() .'/index2.php';

        if (file_exists( $customIndex2 )) {

            require( $customIndex2 );

        } else {

            // needed to seperate the ISO number from the language file constant _ISO

            $iso = split( '=', _ISO );

            // xml prolog

            echo 'xml version="1.0" encoding="'. $iso[1] .'"?' .'>';

        ?>

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

        <html xmlns="http://www.w3.org/1999/xhtml">

            <head>

                 echo $mainframe->getHead(); ?>

                <link rel="stylesheet" xhref="templates/ echo $cur_template;?>/css/template_css.css" type="text/css" />

                <link rel="shortcut icon" xhref=" echo $mosConfig_live_site; ?>/images/favicon.ico" />

                <meta http-equiv="Content-Type" content="text/html;  echo _ISO; ?>" />

                <meta name="robots" content="noindex, nofollow" />

                 if ($my->id || $mainframe->get( 'joomlaJavascript' )) { ?>

                <script language="JavaScript" xsrc=" echo $mosConfig_live_site;?>/includes/js/joomla.javascript.js" type="text/javascript"></script>

                 } ?>

            </head>

            <body class="contentpane">

                 mosMainBody(); ?>

            </body>

        </html>

        

        }

    } else {

        mosMainBody();

    }



Bu uzun kodlar ise içeriğimizi kullandığımız temadan bağımsız olarak gösterir. Yani içeriğin etrafında ne bir modül ne de başka birşey olmaz. Sadece içerik gösterilir.

Şimdi buraya kadar olan yazılarda index2.php içerisindeki kodları anlattım. Gelelim ilk başta bahsettiğimiz 2 güzel değer ve bunu nasıl kullanacağımıza... Birinci değer do_pdf idi. Bu değeri nasıl kullanabiliriz. Mesela yazılardan oluşan bir bileşenimiz var ve bu yazıları üyelere istedikleri zaman pdf formatında göstermek istiyoruz. Yapmanız gereken içeriğin adresinin sonuna &do_pdf=1 şeklinde bir ekleme yapmak. Gerisini joomla kendisi yapıyor. Hatırlarsanız Joomla püf noktaları yazı dizinde bahsettiğim bir &tp=1 eklemesi vardı. Aynı şekilde &do_pdf=1 ile de o sayfadaki içeriği pdf formatında gösterebilirsiniz. Deneme için şöyle birşey yapabiliriz;

http://www.siteadresi.com/index.php?option=com_content&task=view&id=247

bu adrese tıklayın. Daha sonra adres satırının sonuna &do_pdf=1 ekleyin ve index.php yi index2.php olarak değiştirin, tekrar deneyin.

http://www.siteadresi.com/index2.php?option=com_content&task=view&id=247&do_pdf=1

Umarım bu örnek sizlere yeterince açıklayıcı olmuştur. Bu özelliği yaptığınız çeşitli bileşenlerde de kullanabiliriz. Tabi ki kullanabilmeniz için includes/pdf.php dosyasının benzerini kendi bileşeniniz için değiştirerek uygun bir yere koymanız ve bileşeninizin içerisine yukarıda bahsettiğim;


if ( $do_pdf == 1 ){

        include $mosConfig_absolute_path .'/includes/pdf.php';

        exit();

    }



benzeri bir kod eklemeniz gerekiyor.

Gelelim diğer bir değer olan $no_html yi anlatmaya. Bu değer ile içeriğimizi temadan bağımsız gösterebiliriz demiştik. do_dpf ile aynı mantığa dayanır. Yapmanız gereken adres satırının sonuna &no_html=1 eklemek ve index.php yazan yeri index2.php olarak değiştirmek. Örnek ile anlatırsak;

http://www.siteadresi.com/index.php?option=com_content&task=view&id=247

Bu adresi şöyle değiştirelim;

http://www.siteadresi.com/index2.php?option=com_content&task=view&id=247&no_html=1

ve değişikliği görelim. Bir diğer örneğimizi de şöyle verebiliriz;

http://www.siteadresi.com/index.php?option=com_linkdirectory&Itemid=69

Bu adrese bir bakın ve daha sonra adresi şöyle değiştirip tekrar bakın ve aradaki farkı görün.

http://www.siteadresi.com/index2.php?option=com_linkdirectory&Itemid=69&no_html=1

Umarım bu makalemizdeki do_pdf ve no_html değerini sizlere iyi bir şekilde anlatabilmişimdir. Ayrıca kısa da olsa mosGetParam fonksiyonuna da değinmiş olduk.
  • 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