Bileşenimizin ön yüzü ile oldukça uğraştıktan sonra artık bileşenimizin yönetim bölümüne de birşeyler yapmanın zamanı geldi. Şimdi admin/merhaba.php dosyamızı açıp içerisine aşağıdaki kodları koyuyoruz.
merhaba.php:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php // Bu dosyaya direkt erişimi engelleyelim defined('_JEXEC') or die('Restricted access'); // joomla controller kütüphanesini alalım jimport('joomla.application.component.controller'); // Merhaba önekiyle controller dan bir istek alalım $controller = JController::getInstance('Merhaba'); // Request taskını uygulayalım $controller->execute(JRequest::getCmd('task')); // Controller tarafından ataması yapıldıysa geriye dönüş sağlayalım $controller->redirect(); ?> |
Şimdi de temel controller.php dosyamızı oluşturalım.
admin/controller.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php // Bu dosyaya direkt erişimi engelleyelim defined('_JEXEC') or die('Restricted access'); // Joomla controller kütüphanesini alalım jimport('joomla.application.component.controller'); /** * Merhaba bileşeni için genel controller */ class MerhabaController extends JController { /** * display taskı * * @return void */ function display($cachable = false) { // ayarlanmadıysa varsayılan görünümü ayarlayalım JRequest::setVar('view', JRequest::getCmd('view', 'MerhabaListesi')); // call parent behavior parent::display($cachable); } } ?> |
Şimdi kontrolümüz için bir görünüm oluşturalım. Bunun için admin/views/merhabalistesi/view.html.php adında bir dosya oluşturmamız gerekiyor.
admin/views/merhabalistesi/view.html.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?php // Bu dosyaya direkt erişimi engelleyelim defined('_JEXEC') or die('Restricted access'); // Joomla view kütüphanesini alalım jimport('joomla.application.component.view'); /** * MerhabaListesi Görünüm */ class MerhabaViewMerhabaListesi extends JView { /** * gösterilecek öğeler */ protected $items; /** * öğeler için sayfalandırma */ protected $pagination; /** * MerhabaListesi view görünüm metodu * @return void */ function display($tpl = null) { // Modelden veriyi alalım $items = $this->get('Items'); $pagination = $this->get('Pagination'); // Görünüme veriyi atayalım $this->items = $items; $this->pagination = $pagination; // Şablonu gösterelim parent::display($tpl); } } ?> |
Joomla içerisinde görünümler veriyi layout yani şablon kullanarak gösterir. Şimdi admin/views/merhabalistesi/tmpl/default.php adında bir dosya oluşturuyoruz.
default.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php // Bu dosyaya direkt erişimi engelleyelim defined('_JEXEC') or die('Restricted Access'); // tooltip behavior çağıralım JHtml::_('behavior.tooltip'); ?> <form action="<?php echo JRoute::_('index.php?option=com_merhaba'); ?>" method="post" name="adminForm"> <table class="adminlist"> <thead><?php echo $this->loadTemplate('head');?></thead> <tfoot><?php echo $this->loadTemplate('foot');?></tfoot> <tbody><?php echo $this->loadTemplate('body');?></tbody> </table> </form> |
Bu şablonumuz kendi içerisinde birkaç alt şablonu kullanıyor. Her alt şablon ana şablonun ismini önek alarak isimlendirilirler. Dolasıyla oluşturacağımız alt şablonların isimleri default_head.php, default_foot.php ve default_body.php olacaktır.
admin/views/merhabalistesi/tmpl/default_head.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php // Bu dosyaya direkt erişimi engelleyelim defined('_JEXEC') or die('Restricted Access'); ?> <tr> <th width="5"> <?php echo JText::_('com_merhaba_MERHABA_ID'); ?> </th> <th width="20"> <input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count($this-/>items); ?>);" /> </th> <th> <?php echo JText::_('com_merhaba_MERHABA_KARSILAMA'); ?> </th> </tr> |
checkAll Joomla çekirdek kodlarında tanımlanan ve tüm öğeleri seçmemize olanak veren bir javascript fonksiyonudur.
admin/views/merhabalistesi/tmpl/default_body.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php // Bu dosyaya direkt erişimi engelleyelim defined('_JEXEC') or die('Restricted Access'); ?> <?php foreach($this->items as $i => $item): ?> <tr class="row<?php echo $i % 2; ?>"> <td> <?php echo $item->id; ?> </td> <td> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> <td> <?php echo $item->karsilama; ?> </td> </tr> <?php endforeach; ?> |
JHtml::_ çeşitli HTML gösterimini sağlayan yardımcı bir fonksiyondur. Burada bize seçim kutusu oluşturmaya yardımcı olmaktadır.
admin/views/merhabalistesi/tmpl/default_foot.php:
1 2 3 4 5 6 7 | <?php // Bu dosyaya direkt erişimi engelleyelim defined('_JEXEC') or die('Restricted Access'); ?> <tr> <td colspan="3"><?php echo $this->pagination->getListFooter(); ?></td> </tr> |
JPagination sayfalandırma nesnesini gösteren ve yöneten bir Joomla sınıfıdır.
MerhabaListesi görünümü veri için modele ihtiyaç duyar. Joomla!1.6 içerisinde verilerin bir listesini tutan bir sınıf vardır: JModelList. JModelList sınıfı ve devralan sınıflar tek bir metoda ihtiyaç duyarlar:
* _getListQuery: SQL sorgusunu oluşturur
ve iki bölümden oluşur:
* list.start: listenin başlangıç değerini belirler
* list.limit: listenin limit değerini belirler
getItems ve getPagination methodları JModelList sınıfı içerisinde tanımlanmışlardır. MerhabaModelMerhabaListesi sınıfı içerisinde tekrar tanımlanmalarına gerek yoktur.
admin/models/merhabalistesi.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <?php // Bu dosyaya direkt erişimi engelleyelim defined('_JEXEC') or die('Restricted access'); // Joomla modellist kütüphanesini alalım jimport('joomla.application.component.modellist'); /** * MerhabaListesi Modeli */ class MerhabaModelMerhabaListesi extends JModelList { /** * Model içerik string. * * @var string */ protected $_context = 'com_merhaba.merhabalistesi'; /** * Verinin listesini almak için bir SQL sorgusu oluşturan metod * * @return string Bir SQL sorgusu */ protected function _getListQuery() { // Yeni bir sorgu nesnesi oluşturalım $query = new JQuery; // Bazı alanları seçelim $query->select('id,karsilama'); // merhaba tablosundan alalım $query->from('#__merhaba'); return $query; } /** * Model durumunu otomatik hazırlayan metod. * * Bu metod sadece tek bir sefer çağırılmalı ve * getState() metodunu ilk çağırdığımızda oluşturulmalı yoksa * yapılandırma bunu görmezden gelecektir. * * @return void */ protected function _populateState() { // Değerlerimizi alalım $app = JFactory::getApplication('administrator'); // Liste durumunu alalım. $this->setState('list.start', $app->getUserStateFromRequest($this->_context . '.list.start', 'limitstart', 0, 'int')); $this->setState('list.limit', $app->getUserStateFromRequest($this->_context . '.list.limit', 'limit', $app->getCfg('list_limit', 25), 'int')); } } ?> |
_populateState metodu varsayılan olarak getStatemetodu tarafından okunacak bir durum olduğunda otomatik olarak kullanılır.
Şimdi hazırladığımız yeni dosya ve dizinlerimizi hiyerarşik olarak görelim:
* merhaba.xml
* site/index.html
* site/merhaba.php
* site/controller.php
* site/views/index.html
* site/views/merhaba/index.html
* site/views/merhaba/view.html.php
* site/views/merhaba/tmpl/index.html
* site/views/merhaba/tmpl/default.xml
* site/views/merhaba/tmpl/default.php
* site/models/index.html
* site/models/merhaba.php
* admin/index.html
* admin/merhaba.php
* admin/controller.php
* admin/sql/index.html
* admin/sql/install.mysql.utf8.sql
* admin/sql/uninstall.mysql.utf8.sql
* admin/sql/update.mysql.utf8.sql
* admin/models/index.html
* admin/models/fields/index.html
* admin/models/fields/merhaba.php
* admin/models/merhabalistesi.php
* admin/views/index.html
* admin/views/merhabalistesi/index.html
* admin/views/merhabalistesi/view.html.php
* admin/views/merhabalistesi/tmpl/index.html
* admin/views/merhabalistesi/tmpl/default.php
* admin/views/merhabalistesi/tmpl/default_head.php
* admin/views/merhabalistesi/tmpl/default_body.php
* admin/views/merhabalistesi/tmpl/default_foot.php
* admin/tables/index.html
* admin/tables/merhaba.php
Şimdi de merhaba.xml dosyamıza yeni oluşturduğumuz dosya ve dizinleri ekleyelim.
merhaba.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | < ?xml version="1.0" encoding="utf-8"?> <extension type="component" version="1.6.0" method="upgrade"> <name>Merhaba</name> <creationdate>Ocak 2010</creationdate> <author>Soner Ekici</author> <authoremail>pisdoktor@orneksite.com</authoremail> <authorurl>http://www.orneksite.com</authorurl> <copyright>Copyright Bilgisi</copyright> <license>Lisans Bilgisi</license> <version>0.0.7</version> <description>Merhaba bileşeni açıklaması...</description> <install> <!-- Yüklemede çalıştır --> <sql> <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file> </sql> </install> <uninstall> <!-- Kaldırmada çalıştır --> <sql> <file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file> </sql> </uninstall> <update> <!-- Güncellemede çalıştır --> <sql> <file driver="mysql" charset="utf8">sql/update.mysql.utf8.sql</file> </sql> </update> <files folder="site"> <filename>index.html</filename> <filename>merhaba.php</filename> <filename>controller.php</filename> <folder>views</folder> <folder>models</folder> </files> <administration> <menu>Merhaba</menu> <files folder="admin"> <filename>index.html</filename> <filename>merhaba.php</filename> <filename>controller.php</filename> <folder>sql</folder> <folder>tables</folder> <folder>models</folder> <!-- görünüm dosyaları bölümü --> <folder>views</folder> </files> </administration> </extension> |
Paketlenmiş bileşeni indirmek için tıklayın