Soner Ekici

Kişisel web sitesi

Bileşenimizin yönetim bölümünü hazırlayalım

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