Filed Under:  Joomla!, Joomla! 1.6

Bileşenimizin yönetim bölümüne toolbar ekleyelim

5th Şubat 2010   ·   0 Comments

Joomla! 1.6 içerisinde yönetici işlemleri genellikle toolbar (araç çubuğu) üzerindeki butonlar ile gerçekleştirilir. Bu araç çubuğu admin/views/merhabalistesi/view.html.php dosyası içerisinde tanımlanırlar.

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
35
36
37
38
39
40
41
42
43
44
<?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);
        }
        /**
         * Araç çubuğunu ayarlayalım
         */

        protected function _setToolBar()
        {
JToolBarHelper::title(JText::_('com_merhaba_Yönetimi'));
JToolBarHelper::deleteListX('com_merhaba_MerhabaListesi_bu_karsilamalari_silmek_istediginize_eminmisiniz', 'merhabalistesi.remove');
JToolBarHelper::editListX('merhaba.edit');
JToolBarHelper::addNewX('merhaba.add');
        }
}
?>

Joomla! 1.6 içerisindeki diğer klasik araç çubuğu komutlarını administrator/includes/toolbar.php dosyası içerisinde bulabilirsiniz.

Yukarıdaki örneğimizde üç hareket ekledik:

* merhabalistesi.remove
* merhaba.edit
* merhaba.add

Bunlar birleşik hareketlerdir (controller.task). Yani remove hareketi yeni bir MerhabaControllerMerhabaListesi controller içerisinde, add ve edit hareketleri ise MerhabaControllerMerhaba controller içerisinde kodlanması gerekiyor.

admin/controllers/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
<?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');
/**
 * MerhabaListesi Controller
 */

class MerhabaControllerMerhabaListesi extends MerhabaController
{
        /**
         * kayıtları kaldır
         * @return void
         */

        function remove()
        {
                $model = $this->getModel('MerhabaListesi');
                if ($model->remove())
                {
                        $msg = JText::_('com_merhaba_MerhabaListesi_Karsilama_kaldirildi');
                        $type = 'message';
                }
                else
                {
                        $msg = JText::sprintf('com_merhaba_MerhabaListesi_Bir_veya_birkaç_karsilama_silinemedi', implode("<br />", $model->getErrors()));
                        $type = 'error';
                }
                $this->setRedirect('index.php?option=com_merhaba', $msg, $type);
        }
}
?>

admin/controllers/merhaba.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?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 Controller
 */

class MerhabaControllerMerhaba extends MerhabaController
{
        /**
         * oluşturucu (metodlara ek hareketler kaydeder)
         * @return void
         */

        function __construct($config=array())
        {
                parent::__construct($config);
                // Yeni hareketler kaydet
                $this->registerTask('add', 'edit');
        }
        /**
         * edit formunu göster
         * @return void
         */

        function edit()
        {
                $model = & $this->getModel();
                $view = & $this->getView('Merhaba','html');
                $view->setModel($model, true);
                $view->display();
        }
        /**
         * veriyi kaydet (ve ana sayfaya dön)
         * @return void
         */

        function save()
        {
                $model = $this->getModel();
                if ($model->save())
                {
                        $msg = JText::_('com_merhaba_Merhaba_Karsilama_kaydedildi');
                        $type = 'message';
                        $this->setRedirect('index.php?option=com_merhaba', $msg, $type);
                }
                else
                {
                        $msg = JText::sprintf('com_merhaba_Merhaba_Kaydetmede_Hata_olustu', implode("<br />", $model->getError()));
                        $type = 'error';
                        $app = & JFactory::getApplication();
                        $app->enqueueMessage($msg, $type);
                        $view = & $this->getView('Merhaba','html');
                        $view->setModel($model, true);
                        $view->display();
                }
        }
        /**
         * düzenlenen kaydı iptal
         * @return void
         */

        function cancel()
        {
                $msg = JText::_('com_merhaba_Merhaba_düzenleme_iptal_edildi');
                $this->setRedirect('index.php?option=com_merhaba', $msg);
        }
}
?>

Dikkat ettiyseniz iki yeni hareket tanımladık, save ve cancel. Bunlar düzenleme işlemi esnasında kullanılacaklar. add ve edit hareketlerinin aynı fonksiyonda tanımlandığını farketmişsinizdir (Oluşturucu içerisinde RegisterTask kısmına bakın). Şimdi de yeni tanımladığımız save ve cancel hareketleri için araç çubuğumuzu oluşturalım. Bunun için admin/views/merhaba/view.html.php dosyamızı açıyoruz.

admin/views/merhaba/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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?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');
/**
 * Merhaba View
 */

class MerhabaViewMerhaba extends JView
{
        /**
         * View formu
         *
         * @var         form
         */

        protected $form = null;
        /**
         * Merhaba görünümü için gösterim metodu
         * @return void
         */

        public function display($tpl = null)
        {
                // Formu alalım
                $form = & $this->get('Form');
                // Veriyi alalım
                $data = & $this->get('Data');
                // Veriyi yükleyelim
                $form->bind($data);
                // Formu atayalım
                $this->form = $form;
                // Araç çubuğunu ayarlayalım
                $this->_setToolBar();
                // Şablonu gösterelim
                parent::display($tpl);
        }
        /**
         * Araç çubuğu ayarları
         */

        protected function _setToolBar()
        {
                JRequest::setVar('hidemainmenu', 1);
                $isNew = ($this->form->getValue('id') < 1);
                JToolBarHelper::title(JText::_('com_merhaba_Yönetimi') . ': <small><small>[ ' . ($isNew ? JText::_('JToolBar_New') : JText::_('JToolBar_Edit')) . ' ]</small>');
                JToolBarHelper::save('merhaba.save');
                JToolBarHelper::cancel('merhaba.cancel', $isNew ? 'JToolBar_Cancel' : 'JToolBar_Close');
        }
}
?>

Hatırlarsanız veriyi layout kullanarak gösteriyorduk. O halde admin/views/merhaba/tmpl/default.php dosyamızı oluşturalım.

admin/views/merhaba/tmpl/default.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// Bu dosyaya direkt erişimi engelleyelim
defined('_JEXEC') or die('Restricted access');
JHTML::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_merhaba'); ?>" method="post" name="adminForm" id="adminForm">
 
        <fieldset class="adminform">
 
                <legend><?php echo JText::_( 'com_merhaba_Merhaba_Ayrintilar' ); ?></legend>
 
                <?php foreach($this->form->getFields() as $field): ?>
                        <?php if (!$field->hidden): ?>
                                <?php echo $field->label; ?>
 
                        <?php endif; ?>
                        <?php echo $field->input; ?>
 
                <?php endforeach; ?>
        </fieldset>
        <input type="hidden" name="task" value="merhaba.edit" />
 
</form>

MerhabaViewMerhaba gösterimi bir modelden veri ve formu alıyordu. Bu model bir getForm, getData ve kayıt metodlarını içeriyordu. (MerhabaControllerMerhaba controller)

admin/models/helloworld.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
// Bu dosyaya direkt erişimi engelleyelim
defined('_JEXEC') or die('Restricted access');
// Joomla modelform kütüphanesini alalım
jimport('joomla.application.component.modelform');
/**
 * Merhaba Modeli
 */

class MerhabaModelMerhaba extends JModelForm
{
        /**
         * @var array veri
         */

        protected $data = null;
        /**
         * Veriyi alacak metod
         *
         * @access      public
         * @return      array of string
         * @since       1.0
         */

        public function &getData()
        {
                if (empty($this->data))
                {
                        $app = & JFactory::getApplication();
                        $data = & JRequest::getVar('jform');
                        if (empty($data))
                        {
                                $selected = & JRequest::getVar('cid', 0, '', 'array');
                                $query = new JQuery;
                                // merhaba tablosundaki tüm alanları seçelim
                                $query->select('*');
                                $query->from('`#__merhaba`');
                                $query->where('id = ' . (int)$selected[0]);
                                $this->_db->setQuery((string)$query);
                                $data = & $this->_db->loadAssoc();
                        }
                        if (empty($data))
                        {
                                // daha önce girilmiş form verisi için oturumu kontrol edelim.
                                $data = $app->getUserState('com_merhaba.edit.merhaba.data', array());
                                unset($data['id']);
                        }
                        $app->setUserState('com_merhaba.edit.merhaba.data', $data);
                        $this->data = $data;
                }
                return $this->data;
        }
        /**
         * Merhaba formunu almak için metod.
         *
         * @access      public
         * @return      mixed   JForm nesnesi başarılı ise, değilse hata mesajı getir.
         * @since       1.0
         */

        public function &getForm()
        {
                $form = & parent::getForm('merhaba', 'form', array('array' => 'jform') , false);
                return $form;
        }
        /**
         * Veriyi kaydetmek için metod
         *
         * @access      public
         * @return      boolean Başarılı ise
         */

        function save()
        {
                $data = & $this->getData();
                // Veritabanı işlemleri
                $row = & $this->getTable();
                // Form alanlarını merhaba tablosuna yazdır
                if (!$row->save($data))
                {
                        $this->setError($row->getErrorMsg());
                        return false;
                }
                return true;
        }
}
?>

Bu model JModelForm sınıfından devralıyor ve getForm metodunu kullanıyor. Bu metod forms dizini içerisinde formlara ihtiyaç duyacaktır. Dolayısıyla şimdi admin/models/forms/merhaba.xml dosyamızı oluşturuyoruz.

admin/models/forms/merhaba.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
< ?xml version="1.0" encoding="utf-8"?>
<form>
        <fields>
                <field id="id"
                       name="id"
                       type="hidden"
               />
                <field id="karsilama"
                       name="karsilama"
                       type="text"
                       size="40"
                       class="inputbox"
                       default=""
                       label="com_merhaba_Merhaba_Karsilama"
                       description="com_merhaba_Merhaba_Karsilama_Aciklama"
               />
        </fields>
</form>

MerhabaModelMerhabaListesi modeli bize bir remove metodu sağlar (MerhabaControllerMerhabaListesi controller üzerinden çağırılan). O halde admin/models/merhabalistesi.php dosyasını düzenlemeliyiz.

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?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';
/**
         * Seçilen öğeleri kaldırmak için metod
         *
         * @return      boolean
         */

        public function remove()
        {
                // Seçili öğeleri alalım
                $selected = $this->getState('selected');
                // Tablomuzdan satırları alalım
                $table = $this->getTable('Merhaba');
                foreach($selected as $id)
                {
                        // Satırları yükleyelim ve hata var mı bakalım
                        if (!$table->load($id))
                        {
                                $this->setError($table->getError());
                                return false;
                        }
                        // Satırları silelim ve hata var mı bakalım
                        if (!$table->delete())
                        {
                                $this->setError($table->getError());
                                return false;
                        }
                }
                return true;
        }
        /**
         * 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'));
        }
}
?>

Şimdi bileşenimizin son haline hiyerarşik olarak bakalım:
* 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/forms/index.html
* admin/models/forms/merhaba.xml
* admin/models/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/views/merhabalistesi/index.html
* admin/views/merhaba/view.html.php
* admin/views/merhaba/tmpl/index.html
* admin/views/merhaba/tmpl/default.php
* admin/tables/index.html
* admin/tables/merhaba.php
* admin/controllers/index.html
* admin/controllers/merhaba.php
* admin/controllers/merhabalistesi.php

Tags:  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Readers Comments (0)


Comments are closed.