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: addfieldpath, bileşen, Database, getDBO, getTable, JFactory, JFormFieldList, JHtml, JModelItem, Joomla!, Joomla! 1.6, JQuery, JRequest, JTable, kodlamak, load, model, mysql, setQuery, sql, views, __construct
Readers Comments (0)
Comments are closed.