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: add, bind, cancel, edit, enqueueMessage, form, get, getApplication, getData, getFields, getForm, getModel, getState, getTable, getUserStateFromRequest, getValue, getView, JFactory, JModelForm, JModelList, JQuery, JRoute, JText, JView, loadAssoc, Pagination, registerTask, remove, save, setModel, setQuery, setRedirect, setState, setVar, _setToolbar, __construct
Readers Comments (0)
Comments are closed.