Joomla! 1.5 için basit bir bileşen oluşturmak - Bölüm 1

Joomla! 1.5 MVC yapısını kısaca anlattıktan sonra basit bir bileşenin kodlarını görmek, bileşen yapımına geçmeden önce yapılacak en iyi şeydir.

Joomla! 1.5 MVC yapısını kısaca anlattıktan sonra basit bir bileşenin kodlarını görmek, bileşen yapımına geçmeden önce yapılacak en iyi şeydir.

Joomla! 1.5 için hazırlayacağımız basit bileşenimizde temel olarak aşağıdaki beş dosyaya ihtiyacımız olacak.

* site/merhaba.php - bu bileşenimizin ana giriş noktasını oluşturuyor
* site/controller.php - bu dosya bizim temel controller ifadelerimizi içeriyor
* site/views/merhaba/view.html.php - Bu dosya gerekli verileri tutacak ve şablon içerisine gönderecek
* site/views/merhaba/tmpl/default.php - Bileşeni göstermek için şablon dosyası
* merhaba.xml - Joomla! ya bileşenimizi nasıl kuracağını söyleyen bir XML (hareket) dosyası

Öncelikle bilmemiz gereken temel kurallardan bahsedelim.

- Oluşturacağımız bileşenin adı içerisinde alt çizgi, nokta, virgül v.b işaretler ve türkçe karakterler kullanmaktan kaçınmamız gerekiyor. Mümkünse kısa bir isim seçmek hem kodlamada hem de yüklemede sorun olmaması adına en iyi yoldur.

- Bileşenimizin adı ne olacaksa (bu örnekte com_merhaba) bileşenimizin ana giriş noktasındaki php dosyasının adı da o olmalıdır. Aksi halde bileşenimiz çalışmaz. Genel prensip olarak bileşenimizin ismi ne ise kurulum dosyamızın ve ana giriş noktasındaki dosyamızın adı da odur.

- Bileşenimizde kullanacağımız sınıfların isimleri genelde {Bileşenadı}{Controller}{Controlleradı} veya {Bileşenadı}{View}{Viewadı} şeklinde olmalıdır. Bu sayede ilerleyen zamanlarda işimiz kolaylaşacak ve sınıflar karışmayacaktır.

- Joomla daima giriş için tek bir dosya kullanır. Örneğin; site uygulamaları için index.php, yönetim sayfası uygulamaları için administrator/index.php. Ardından URL adresindeki 'option' seçeneğine bakarak uygun bileşeni çağırır. Dolayısıyla bizim şimdi yapacağımız bileşenimizin giriş adresi;


index.php?option=com_merhaba&view=merhaba



olacaktır.

Bu adres satırı bizim bileşenimizin ana giriş dosyasını yani components/com_merhaba/merhaba.php dosyasını çağıracaktır. Hazırlayacağımız ilk dosya ana giriş dosyamız site/merhaba.php olacaktır.

merhaba.php:


<?php 

// Direkt erişimi engelleyelim

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

 

// Temel controller sınıfını alalım

require_once( JPATH_COMPONENT.DS.'controller.php' );

 

// İstendiyse özel controller sınıfını alalım

if($controller JRequest::getVar('controller')) {

    
$path JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';

    if (
file_exists($path)) {

        require_once 
$path;

    } else {

        
$controller '';

    }

}

// Bileşenimizin controller sınıfını oluşturalım

$classname    'MerhabaController'.$controller;

$controller   = new $classname( );

 

// Task isteğini uygulayalım

$controller->executeJRequest::getVar'task' ) );

 

// Controller tarafından istendiyse geriye dönüş sağlayalım

$controller->redirect(); ?>



* JPATH_COMPONENT değeri bileşenimizin varsayılan yolunu gösterir, components/com_merhaba. Eğer kullanmak istersek JPATH_COMPONENT_SITE bileşenimizin site ön yüzü için veya JPATH_COMPONENT_ADMINISTRATOR bileşenimizin yönetim bölümü için varsayılan yolu olarak tanımlanmıştır.

* DS dizin ayracıdır. '/' veya ''. Farklı sunucular arasındaki farklılıklardan etkilenmemek adına bunu kullanırız.

* Temel controller.php dosyamızı aldıktan sonra eğer bileşenimizin içerisinde başka controller sınıfları varsa onu alıyoruz. Örneğin MerhabaControllerController1 adında yeni bir controller sınıfı oluşturduğumuzda yeni sınıfımızın bulunacağı dosya ?com_merhaba/controllers/controller1.php? olacaktır. Bunu bileşenimizi geliştirirken yeni controller sınıfları oluşturduğumuzda daha iyi anlayacaksınız.

* JRequest::getVar() fonksiyonu URL adresi veya POST fonksiyonu içerisindeki değerleri alır. Yukarıdaki örnekte 'task' değerini alıyor.

* Controller oluşturulduktan sonra execute komutuyla bileşenimizi çalıştırıyoruz. Böylece index.php?option=com_merhaba&task=birdeger gibi bir adres elde ediyoruz. Eğer task değeri tanımlanmamışsa varsayılan olarak 'display' taskı uygulanır.

* Bileşenimizde herhangi bir işlem gerçekleştirdiğimizde (örneğin bir kayıt işlemi) controllerdan geriye dönüş sağlamak için redirect(); fonksiyonunu kullandık.

* Dikkat ederseniz kodlamanın sonunda ?> etiketi ile PHP kodumuzu kapatmadık. Buradaki amacımız ingilizce 'whitespace' denilen ölü boşlukların oluşmasının önüne geçmektir. Bundan sonra hazırlayacağımız tüm php uzantılı dosyalarda PHP etiketini kapatmayacağım.

Şimdi bileşenimizin MerhabaController sınıfını içeren controller.php dosyasını hazırlayalım. Bileşenimiz sadece tek bir task değerinden oluşacağı ve herhangi bir veri işlemi olmayacağı için hazırlayacağımız sınıf oldukça basit olacaktır.

controller.php:

<?php 

// Direkt erişimi engelleyelim

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

 

jimport('joomla.application.component.controller');

 

/**

 * Merhaba Component Controller

 */

class MerhabaController extends JController

{

    
/**

     * Gösterim sağlayan metodumuz

     */

    
function display()

    {

        
parent::display();

    }

?>


JController daima display() taskını kayıt eder. JController:isplay() metodu ise istekle gelen view değerini belirler.

Şimdi bileşenimizin gösterilecek verisini tutan ve şablona gönderen view kısmını yapalım. Bunun için oluşturacağımız dosyamız site/views/merhaba/view.html.php dosyası olacaktır.

view.html.php:

<?php 

// Direkt erişimi engelleyelim

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

 

jimport'joomla.application.component.view');

 

/**

 * Merhaba bileşenimiz için HTML View sınıfı

 */

 

class MerhabaViewMerhaba extends JView

{

    function 
display($tpl null)

    {

        
$karsilama "Cümleten Merhaba!";

        
$this->assignRef'karsilama'$karsilama );

        
parent::display($tpl);

    }

?>


Verilerimizi şablonumuza gönderilmek için assignRef() fonksiyonunu kullanıyoruz.

Şimdi şablonumuzu oluşturalım. Bileşenimizde tek bir task olduğu için sadece tek bir şablon dosyamız olacak. Oluşturacağımız yer site/views/merhaba/tmpl/default.php şeklinde olacak.

default.php:

<?php 

// Direkt erişimi engelleyelim

defined('_JEXEC') or die('Restricted access'); ?>



<h1> echo $this->karsilama; ?></h1> ?>


Bileşenimizi basitçe oluşturduktan sonra kurulum dosyası olan merhaba.xml dosyamızı oluşturalım. Güvenlik sebebiyle her dizine boş bir 'index.html' koymakta fayda vardır.

merhaba.xml:

< ?xml version="1.0" encoding="utf-8"?>

<install type="component" version="1.5.0">

 <name>Merhaba</name>

 <!-- Aşağıdaki elementler isteğe bağlıdır. Bileşen hakkında bilgi verirler. -->

 <creationdate>2010-02-10</creationdate>

 <author>Soner Ekici</author>

 <authoremail>pisdoktor@orneksite.com</authoremail>

 <authorurl>http://www.orneksite.com</authorurl>

 <copyright>Copyright Bilgisi</copyright>

 <license>Lisans Bilgisi</license>

 <!--  Sürüm bilgisi veritabanındaki components tablosuna kaydedilecektir -->

 <version>1.0</version>

 <!-- Açıklama isteğe bağlıdır -->

 <description>Bileşenin açıklaması...</description>

 

 <!-- Site Ana Dosya Kopyalama Bölümü -->

 <!-- folder etiketi hakkında: Bu etiket bileşenimizin paket dosyası içerisinde

neredeki dosyaların sitemizin ön yüzüne aktarılacağını tanımlar. Bizim bileşen

örneğimizde paketimizdeki /site/ klasöründen aktarılacak -->

 <files folder="site">

  <filename>controller.php</filename>

  <filename>merhaba.php</filename>

  <filename>index.html</filename>

  <filename>views/index.html</filename>

  <filename>views/merhaba/index.html</filename>

  <filename>views/merhaba/view.html.php</filename>

  <filename>views/merhaba/tmpl/default.php</filename>

  <filename>views/merhaba/tmpl/index.html</filename>

 </files>

 

 <administration>

  <!-- Yönetim Menüsü Bölümü -->

  <menu>Merhaba!</menu>

 

  <!-- Yönetim Ana Dosya Kopyalama Bölümü -->

  <files folder="admin">

   <filename>merhaba.php</filename>

   <filename>index.html</filename>

  </files>

 

 </administration>

</install>


  • 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