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;
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:
* 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:
JController daima display() taskını kayıt eder. JController::display() 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:
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:
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:
Devam Bölüm 2
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;
Kod:
index.php?option=com_merhaba&view=merhaba
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:
Kod:
<?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->execute( JRequest::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:
Kod:
<?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();
}
}
Ş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:
Kod:
<?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);
}
}
Ş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:
Kod:
<?php
// Direkt erişimi engelleyelim
defined('_JEXEC') or die('Restricted access'); ?>
<h1><?php echo $this->karsilama; ?></h1>
merhaba.xml dosyamızı oluşturalım. Güvenlik sebebiyle her dizine boş bir
'index.html' koymakta fayda vardır.
merhaba.xml:
Kod:
< ?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>[email protected]</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>
Devam Bölüm 2
Son düzenleme: