Joomla! 1.5 için basit bir bileşen oluşturmak - Bölüm 5

Joomla! 1.5 için oluşturduğumuz basit bileşenimizi kodlamanın sonuna geldik. Bu son aşamayla birlikte elimizde oldukça basit bir MVC yapısına uygun bileşenimiz olacak.

Joomla! 1.5 için oluşturduğumuz basit bileşenimizi kodlamanın sonuna geldik. Bu son aşamayla birlikte elimizde oldukça basit bir MVC yapısına uygun bileşenimiz olacak.

Son yazımda bileşenimizin yönetim bölümüne veritabanındaki karşılama mesajlarını listeleyen bir sayfa oluşturmuş ve ayrıca araç çubuğundaki butonlarımızı belirlemiştik. Şimdi bu butonlara işlevsellik kazandırmak için bileşenimizin yönetim bölümü dosyaları üzerinde değişiklikler yapalım. Öncelikle hazırladığımız default.php şablon dosyamızda bazı değişiklikler yapalım. default.php dosyamızda şöyle bir tablo alanı oluşturmuştuk;


<thead>

        <tr>

            <th width="5">

                 echo JText::_( 'ID' ); ?>

            </th>

            <th>

                 echo JText::_( 'Karsilama' ); ?>

            </th>

        </tr>            

    </thead>


Bu alanı şu hale getiriyoruz;

<thead>

        <tr>

            <th width="5">

                 echo JText::_( 'ID' ); ?>

            </th>

            <th width="20">

                <input type="checkbox" name="toggle" value="" onclick="checkAll( echo count( $this-/>items ); ?>);" />

            </th>

            <th>

                 echo JText::_( 'Karsilama' ); ?>

            </th>

        </tr>            

    </thead>



Burada eklediğimiz kodlar;


<th width="20">

                <input type="checkbox" name="toggle" value="" onclick="checkAll( echo count( $this-/>items ); ?>);" />

            </th>


Daha sonra aynı default.php içerisinde;

$row =& $this->items[$i];


olan kısmı şöyle değiştiriyoruz;

$row        = &$this->items[$i];

        $checked    = JHTML::_('grid.id',   $i, $row->id );

        $link       = JRoute::_( 'index.php?option=com_merhaba&controller=merhaba&task=edit&cid[]='. $row->id );



ve hemen altında;


<tr class=" echo "row$k"; ?>">

            <td>

                 echo $row->id; ?>

            </td>

            <td>

                 echo $row->karsilama; ?>

            </td>

        </tr>


olan kodları şöyle değiştiriyoruz;

<tr class=" echo "row$k"; ?>">

            <td>

                 echo $row->id; ?>

            </td>

            <td>

                 echo $checked; ?>

            </td>

            <td>

                 <a href=" echo $link; ?>"> echo $row->karsilama; ?></a>

            </td>

        </tr>



Böylece merhabalar listesinden bir merhaba alanını veya tümünü seçmek için bir checkbox oluşturmuş olduk. default.php dosyasının son hali şu şekilde oldu;

default.php:


<?php  defined('_JEXEC') or die('Restricted access'); ?>

<form action="index.php" method="post" name="adminForm">

<div id="editcell">

    <table class="adminlist">

    <thead>

        <tr>

            <th width="5">

                 echo JText::_( 'ID' ); ?>

            </th>

            <th width="20">

                <input type="checkbox" name="toggle" value="" onclick="checkAll( echo count( $this-/>items ); ?>);" />

            </th>

            <th>

                 echo JText::_( 'Karsilama' ); ?>

            </th>

        </tr>            

    </thead>

    

    $k = 0;

    for ($i=0, $n=count( $this->items ); $i < $n; $i++)

    {

        $row        = &$this->items[$i];

        $checked    = JHTML::_('grid.id',   $i, $row->id );

        $link       = JRoute::_( 'index.php?option=com_merhaba&controller=merhaba&task=edit&cid[]='. $row->id );

        ?>

        <tr class=" echo "row$k"; ?>">

            <td>

                 echo $row->id; ?>

            </td>

            <td>

                 echo $checked; ?>

            </td>

            <td>

                 <a href=" echo $link; ?>"> echo $row->karsilama; ?></a>

            </td>

        </tr>

        

        $k = 1 - $k;

    }

    ?>

    </table>

</div>

<input type="hidden" name="option" value="com_merhaba" />

<input type="hidden" name="task" value="" />

<input type="hidden" name="boxchecked" value="0" />

<input type="hidden" name="controller" value="merhaba" />

</form> ?>



Bu listeden bir merhaba seçeneğini seçtiğimizde yapılacak işlemler için öncelikle controller oluşturmamız gerekiyor. Bunun için ise controllers adında bir klasör oluşturup içerisine bir merhaba controller hazırlamamız gerekiyor.

admin/controllers/merhaba.php:


<?php 

// Direkt erişimi engelleyelim

defined'_JEXEC' ) or die( 'Restricted access' );



/**

 * Merhaba Merhaba Controller

 */

class MerhabalarControllerMerhaba extends MerhabalarController

{

    
/**

     * oluşturucu (metodlara ek task özellikleri kayıt eder)

     * @return void

     */

    
function __construct()

    {

        
parent::__construct();



        
// Ek taskları kayıt edelim

        
$this->registerTask'add''edit' );

    }



    
/**

     * düzenleme formunu gösterelim

     */

    
function edit()

    {

        
JRequest::setVar'view''merhaba' );

        
JRequest::setVar'layout''form'  );

        
JRequest::setVar('hidemainmenu'1);



        
parent::display();

    }



    
/**

     * veriyi kaydedelim (ve bileşen ana sayfamıza geri dönelim)

     */

    
function save()

    {

        
$model $this->getModel('merhaba');



        if (
$model->store($post)) {

            
$msg JText::_'Karşılama Kaydedildi!' );

        } else {

            
$msg JText::_'Karşılama Kaydedilirken Hata Oluştu' );

        }



        
// Geriye dönüş sağlayalım

        
$link 'index.php?option=com_merhaba';

        
$this->setRedirect($link$msg);

    }



    
/**

     * verileri silme

     */

    
function remove()

    {

        
$model $this->getModel('merhaba');

        if(!
$model->delete()) {

            
$msg JText::_'Hata: Bir veya Daha fazla karşılama silinemedi' );

        } else {

            
$msg JText::_'Karşılama(lar) silindi' );

        }



        
$this->setRedirect'index.php?option=com_merhaba'$msg );

    }



    
/**

     * veri düzenlemeyi iptal edelim

     */

    
function cancel()

    {

        
$msg JText::_'İşlem İptal Edildi' );

        
$this->setRedirect'index.php?option=com_merhaba'$msg );

    }

?>



Bu kodları inceleyecek olursak;


$this->registerTask( 'add', 'edit' );


registerTask metodu ile yeni task işlemlerimizi tanımladık. Diğer task işlemlerimizin fonksiyonlarını da bu dosya içerisinde hazırladık.

Gelelim bir karşılamaya tıkladığımızda gelecek olan form sayfasını hazırlamaya. Bunun için views klasörümüz içerisinde yeni bir klasör açıyoruz ve adını ?merhaba? koyuyoruz. Daha sonra içerisine her zamanki gibi view.html.php dosyamızı koyup içerisine şu kodları yerleştiriyoruz.

admin/views/merhaba/view.html.php:


<?php 

// Direkt erişimi engelleyelim

defined'_JEXEC' ) or die( 'Restricted access' );



jimport'joomla.application.component.view' );



/**

 * Merhaba View

 */

class MerhabalarViewMerhaba extends JView

{

    
/**

     * Merhaba view gösterim metodu

     **/

    
function display($tpl null)

    {

        
//merhabayı alalım

        
$merhaba      =& $this->get('Data');

        
$isNew        = ($merhaba->id 1);



        
$text $isNew JText::_'Yeni' ) : JText::_'Düzenle' );

        
JToolBarHelper::title(   JText::_'Merhaba' ).': <small><small>[ ' $text.' ]</small>' );

        
JToolBarHelper::save();

        if (
$isNew)  {

            
JToolBarHelper::cancel();

        } else {

            
// varolan öğeler için butonumuz `Kapat` olarak görünecek

            
JToolBarHelper::cancel'cancel''Kapat' );

        }



        
$this->assignRef('merhaba'$merhaba);



        
parent::display($tpl);

    }

?>



Burada da gelecek olan form sayfamızda kullanacağımız araç çubuğu butonlarını hazırladık. Şimdi de form sayfamızın şablonunu oluşturalım.

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


<?php  defined('_JEXEC') or die('Restricted access'); ?>



<form action="index.php" method="post" name="adminForm" id="adminForm">

<div class="col100">

    <fieldset class="adminform">

        <legend> echo JText::_( 'Detaylar' ); ?></legend>



        <table class="admintable">

        <tr>

            <td width="100" align="right" class="key">

                <label for="karsilama">

                     echo JText::_( 'Karşılama' ); ?>:

                </label>

            </td>

            <td>

                <input class="text_area" type="text" name="karsilama" id="karsilama" size="32" maxlength="250" value=" echo $this-/>merhaba->karsilama;?>" />

            </td>

        </tr>

    </table>

    </fieldset>

</div>

<div class="clr"></div>



<input type="hidden" name="option" value="com_merhaba" />

<input type="hidden" name="id" value=" echo $this-/>merhaba->id; ?>" />

<input type="hidden" name="task" value="" />

<input type="hidden" name="controller" value="merhaba" />

</form> ?>



Formumuz hazırlandı. Şimdi bu formumuza veriyi gönderecek olan modelimizi oluşturmamız gerekiyor. Bunun için admin/models/merhaba.php dosyamızı oluşturuyoruz.

admin/models/merhaba.php:


<?php 

// Direkt erişimi engelleyelim

defined'_JEXEC' ) or die( 'Restricted access' );



jimport('joomla.application.component.model');



/**

 * Merhaba Merhaba Modeli

 */

class MerhabalarModelMerhaba extends JModel

{

    
/**

     * ID değerinden verileri getiren oluşturucu

     */

    
function __construct()

    {

        
parent::__construct();



        
$array JRequest::getVar('cid',  0'''array');

        
$this->setId((int)$array[0]);

    }



    
/**

     * merhaba id değerini ayarlayan metodumuz

     */

    
function setId($id)

    {

        
// id değerini al ve veriye yükle

        
$this->_id      $id;

        
$this->_data    null;

    }



    
/**

     * Veriyi veritabanından alan metodumuz

     */

    
function &getData()

    {

        
// Veriyi yükle

        
if (empty( $this->_data )) {

            
$query ' SELECT * FROM #__merhaba '.

                    
'  WHERE id = '.$this->_id;

            
$this->_db->setQuery$query );

            
$this->_data $this->_db->loadObject();

        }

        if (!
$this->_data) {

            
$this->_data = new stdClass();

            
$this->_data->id 0;

            
$this->_data->karsilama null;

        }

        return 
$this->_data;

    }



    
/**

     * Veriyi kaydeden metodumuz

     */

    
function store()

    {    

        
$row =& $this->getTable();



        
$data JRequest::get'post' );



        
// Form alanlarını veritabanı tablomuza oturtalım

        
if (!$row->bind($data)) {

            
$this->setError($this->_db->getErrorMsg());

            return 
false;

        }



        
// Kayıtların doğruluğunu onaylıyalım

        
if (!$row->check()) {

            
$this->setError($this->_db->getErrorMsg());

            return 
false;

        }



        
// Verileri veritabanına kaydedelim

        
if (!$row->store()) {

            
$this->setError$row->getErrorMsg() );

            return 
false;

        }



        return 
true;

    }



    
/**

     * Kayıtları silen metodumuz

     */

    
function delete()

    {

        
$cids JRequest::getVar'cid', array(0), 'post''array' );



        
$row =& $this->getTable();



        if (
count$cids )) {

            foreach(
$cids as $cid) {

                if (!
$row->delete$cid )) {

                    
$this->setError$row->getErrorMsg() );

                    return 
false;

                }

            }

        }

        return 
true;

    }



?>



Modelimizi de oluşturduk fakat veritabanındaki tablolarımızı modelimize tanıtmadık. Dolasıyla yapmamız gereken en önemli şey bir tablo yapısı sınıfı oluşturmak. Bunun için admin/tables/merhaba.php dosyasını oluşturuyoruz.

admin/tables/merhaba.php:


<?php 

// Direkt erişimi engelleyelim

defined'_JEXEC' ) or die( 'Restricted access' );



/**

 * Merhaba Table sınıfı

 */

class TableMerhaba extends JTable

{

    
/**

     * Birincil anahtarımız

     * @var int

     */

    
var $id null;



    
/**

     * @var string

     */

    
var $karsilama null;



    
/**

     * Oluşturucu

     * @param nesne Veritabanı bağlantı nesnesi

     */

    
function TableMerhaba(& $db) {

        
parent::__construct('#__merhaba''id'$db);

    }

?>



Şimdi bileşenimizin veritabanındaki verilerini değiştirme, yeni ekleme ve silme işlemlerini yapabiliriz. Burada JTable ve JToolbarHelper sınıflarına da biraz olsun girmiş olduk. Son olarak merhaba.xml dosyamızı yeni oluşturduğumuz dosyaları da ekleyerek düzenleyelim.

merhaba.xml:


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>pisdoktor@orneksite.com</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.5</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>

  <filename>models/merhaba.php</filename>

  <filename>models/index.html</filename>

 </files>

<install>

  <sql>

    <file charset="utf8" driver="mysql">install.sql</file>

  </sql>

 </install>

 <uninstall>

  <sql>

    <file charset="utf8" driver="mysql">uninstall.sql</file>

  </sql>

 </uninstall>

 <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>controller.php</filename>

   <filename>index.html</filename>

   <filename>install.sql</filename>

   <filename>uninstall.sql</filename>

   <filename>views/index.html</filename>

   <filename>views/merhaba/view.html.php</filename>

   <filename>views/merhaba/index.html</filename>

   <filename>views/merhaba/tmpl/index.html</filename>

   <filename>views/merhaba/tmpl/form.php</filename>

   <filename>views/merhabalar/index.html</filename>

   <filename>views/merhabalar/view.html.php</filename>

   <filename>views/merhabalar/tmpl/index.html</filename>

   <filename>views/merhabalar/tmpl/default.php</filename>

   <filename>models/merhabalar.php</filename>

   <filename>models/merhaba.php</filename>

   <filename>models/index.html</filename>

   <filename>tables/index.html</filename>

   <filename>tables/merhaba.php</filename>

   <filename>controllers/index.html</filename>

   <filename>controllers/merhaba.php</filename>

  </files>

  </administration>

</install>


  • Etiketler;
Soner Ekici
1981 yılında Denizli' de doğdu. 1999 yılında başladığı PHP ve MySQL çalışmalarına 2004 yılında Joomla! ile devam etti. Joomla! için çeşitli eklentiler kodladı. <p>Halen Joomla! için aktif olarak eklentiler kodlayan Soner Ekici Afyonkarahisar ili Şuhut ilçesinde pratisyen hekim olarak görev yapmaktadır.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

merhaba joomla ile site yaptm sitenn alt kısmında ki yazıyı kaldıramıyorum.joomladan yöneticilernden yardm istedim ücretle kaldırabileceklerini söylediler.yardımcı olurmusunuz?

Yukarı Git