Filed Under:  Joomla!, Joomla! 1.6

Bileşenimizde veritabanı kullanalım

4th Şubat 2010   ·   0 Comments

Bileşenler genelde içeriklerini veritabanı kullanarak yönetirler. Bir bileşeni yükleme/kaldırma/güncelleme işlemleri esnasında sql sorguları kullanırız. Şimdi bileşenimiz için kullanacağımız sql sorgularını hazırlayalım. Yazı editörümüzü açıp bileşenimizin içerisinde admin/sql/install.mysql.utf8.sql adında bir dosya oluşturuyoruz.

admin/sql/install.mysql.utf8.sql:

1
2
3
4
5
6
7
8
9
10
11
DROP TABLE IF EXISTS `#__merhaba`;
 
CREATE TABLE `#__merhaba` (
        `id` INT(11) NOT NULL AUTO_INCREMENT,
        `karsilama` VARCHAR(25) NOT NULL,
        PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
 
INSERT INTO `#__merhaba` (`karsilama`) VALUES
        ('Merhaba!'),
        ('Güle Güle!');

Bu dosya bizim kurulumda kullanacağımız sql sorgusunu içeriyor. Şimdi merhaba.xml dosyamıza bu sql dosyasını ekleyelim.

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.6</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>
                        <!-- SQL dosyaları bölümü -->
                        <folder>sql</folder>
                        <!-- Tablo dosyaları bölümü -->
                        <folder>tables</folder>
                        <!-- Model dosyaları bölümü -->
                        <folder>models</folder>
                </files>              
        </administration>
</extension>

Yukarıda yaptığımız sql dosyasının bir benzerini kaldırma ve güncelleme için hazırlayalım. Kaldırmada kullanılacak sql sorgusu için admin/sql/uninstall.mysql.utf8.sql dosyasını oluşturuyoruz.

admin/sql/uninstall.mysql.utf8.sql:

1
DROP TABLE IF EXISTS `#__merhaba`;

Güncellemede kullanılacak sql sorgusu için admin/sql/update.mysql.utf8.sql dosyasını oluşturuyoruz.

admin/sql/update.mysql.utf8.sql:

1
2
3
4
5
6
7
8
9
10
11
DROP TABLE IF EXISTS `#__merhaba`;
 
CREATE TABLE `#__merhaba` (
        `id` INT(11) NOT NULL AUTO_INCREMENT,
        `karsilama` VARCHAR(25) NOT NULL,
        PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
 
INSERT INTO `#__merhaba` (`karsilama`) VALUES
        ('Merhaba!'),
        ('Güle Güle!');

Şuandan itibaren gerçekten karışık kodlar yazmamız gerekiyor. Mesajımızı seçmek için veritabanını kullanacağız.
Öncelikle değiştirmemiz gereken dosya site/views/merhaba/tmpl/default.xml dosyası. İçeriğini aşağıdaki kodlarla değiştiriyoruz.

default.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< ?xml version="1.0" encoding="utf-8"?>
<metadata>
        <layout title="com_merhaba_merhaba_görünüm_varsayılan_başlık">
                <message>com_merhaba_merhaba_görünüm_varsayılan_başlık</message>
        </layout>
        <fields group="request"
               array="true"
               addfieldpath="/administrator/components/com_merhaba/models/fields">
                <field id="id"
                       name="id"
                       type="merhaba"
                       label="Merhaba_Merhaba_Msj_Label"
                       description="Merhaba_Merhaba_Msj_Açıklaması"
               />
        </fields>
</metadata>

Bu kod ile Joomla!’ ya eklediğimiz yeni karşılama türlerini /administrator/components/com_merhaba/models/fields klasörü içerisinden almasını söylüyoruz. O halde /administrator/components/com_merhaba/models/fields içerisindeki merhaba.php dosyamızı aşağıdaki kodlarla oluşturalım.

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
<?php
// Bu dosyaya direkt erişimi engelleyelim
defined('_JEXEC') or die;
// liste alan çeşitlerini alalım
jimport('joomla.html.html.list');
/**
 * Merhaba bileşeni için Merhaba form alanı sınıfı
 */

class JFormFieldMerhaba extends JFormFieldList
{
        /**
         * Alan türü
         *
         * @var         string
         */

        protected $type = 'Merhaba';
        /**
         * Bir liste oluşturmak için seçeneklerin bir listesini alalım
         *
         * @return      array           JHtml seçeneklerinin bir dizisi
         */

        protected function _getOptions()
        {
                $db = JFactory::getDBO();
                $query = new JQuery;
                $query->select('id,karsilama');
                $query->from('#__merhaba');
                $db->setQuery((string)$query);
                $messages = $db->loadObjectList();
                $options = array();
                foreach($mesajlar as $mesaj)
                {
                        $options[] = JHtml::_('select.option', $mesaj->id, $mesaj->karsilama);
                }
                $options = array_merge(parent::_getOptions() , $options);
                return $options;
        }
}
?>

Bu bileşen için bir menü öğesi oluşturulduğunda veya güncellendiğinde Joomla! mesajın tanımlayıcısını saklar. MerhabaModelMerhaba modeli şimdi tanımlayıcısına göre mesajı veritabanından saklandığı yerden çağıracak. Bunun için site/models/merhaba.php dosyasını düzenliyoruz.

site/models/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
<?php
// Bu dosyaya direkt erişimi engelleyelim
defined('_JEXEC') or die('Restricted access');
// Joomla modelitem kütüphanesini alalım
jimport('joomla.application.component.modelitem');
/**
 * Merhaba Modeli
 */

class MerhabaModelMerhaba extends JModelItem
{
        /**
         * @var string msj
         */

        protected $msg;
        /**
         * Mesajı alalım
         * @return string Mesaj kullanıcıya gösterilecek
         */

        public function getMsg()
        {
                if (!isset($this->msg))
                {
                        $id = JRequest::getInt('id');
                        // MerhabaTablosu içerisindekileri alalım
                        $table = $this->getTable();
                        // Mesajı alalım
                        $table->load($id);
                        // Mesajı atıyalım
                        $this->msg = $table->karsilama;
                }
                return $this->msg;
        }
}
?>

Modelimiz şimdi bize mesajı alabilmek için MerhabaTablosunu soracaktır. O yüzden şimdi tablomuzu oluşturalım. Bunun için admin/tables/merhaba.php adında bir dosya oluşturuyoruz ve içerisine aşağıdaki kodları koyuyoruz.

admin/tables/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
<?php
// Bu dosyaya direkt erişimi engelleyelim
defined('_JEXEC') or die('Restricted access');
// Joomla tablo kütüphanesini alalım
jimport('joomla.database.table');
/**
 * Merhaba Tablo sınıfı
 */

class TableMerhaba extends JTable
{
        /**
         * Birincil anahtar
         *
         * @var int
         */

        var $id = null;
        /**
         * @var string
         */

        var $karsilama = null;
        /**
         * Oluşturucu
         *
         * @param object Veritabanı bağlantı nesnesi
         */

        function TableMerhaba(&$db)
        {
                parent::__construct('#__merhaba', 'id', $db);
        }
}
?>

Yeni hazırladığımız dosyalarımız ve dizinlerimizi hiyerarşik şekilde 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/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/tables/index.html
* admin/tables/merhaba.php

Hazırladığımız dosyaların paketlenmiş halini indirmek için tıklayın

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

Readers Comments (0)


Comments are closed.