JoomKitapÖncelikle sitemizde ziyaretçilerimiz için bir kitap listesi haazırlamakla başlıyoruz. Daha önceki basit com_merhaba örneğimizde olduğu gibi , aşağıdaki dosyalara ihtiyaç duyacaksınız :
/components/com_kitap/kitap.php
/components/com_kitap/controller.php
/components/com_kitap/views/kitap/view.html.php
/components/com_kitap/views/kitap/tmpl/default.php
/components/com_kitap/models/kitap.php
Dikkat ettiyseniz, veritabanında verileri almak için kullanılacak bir model dizini mevcut.
Burada da, bir başlangıç noktası bulunmaktadır. /components/com_kitap/kitap.php herşeyi biraraya toplar ve görev dağılımını gerçekleştirir.
<?php
// doğrudan erişim yok
defined('_JEXEC') or die('Restricted access');
// temel controller'lar yüklenir.
require_once (JPATH_COMPONENT.DS.'controller.php');
// Controller oluştur
$controller = new kitapController();
// request task oku
$controller->execute(JRequest::getCmd('task'));
// redirect controller
$controller->redirect();
?>
Yukarıdaki kod, com_merhaba bilşenimizdeki ile neredeyse tamamiyle aynıdır.
Burada da yine com_merhaba bileşenemizdekine benzer bir kod karşınıza çıkacaktır.
<?php
defined('_JEXEC') or die();
jimport('joomla.application.component.controller');
/**
* Kitap bileşeni controller
*/
class KitapController extends JController
{
function display()
{
// Standart vıew
if ( ! JRequest::getCmd( 'view' ) ) {
JRequest::setVar('view', 'categories' );
}
parent::display();
}
}
Bu dosyada ilk farklılıklar ile karşılaşacaksınız.Tabi ki listemiz için verilere ihtiyacımız var
<?php
jimport( 'joomla.application.component.view');
/**
* Kitap bilrşrni için HTML View clasc
*/
class KitapViewKitap extends JView
{
function display($tpl = null)
{
$model = &$this->getModel();
$rows = $model->getKitapList();
$this->assignRef('rows' , $rows);
parent::display($tpl);
}
}
?>
$model = &$this->getModel();
Model instance'ı oluşturulur ve nesne olarak $model değişkenine aktarılır.
$rows = $model->getKitapList();
getKitapList metodu, oluşturulan obje içerisinden çağrılır ve geriye $rows (satırlar) değişkenini gönderir.
$this->assignRef('rows', $rows);
parent::display($tpl);
Elde edilen bu sonuç satırları temaya (template) gönderilir.
Standard-Temada $rows değişkeni içerisindeki her bir satır elemanı for each döngüsü ile okunur ve $row değişkenine aktarılır ve ardından her bir satır ekrana yazıdırlır.
<?php
defined('_JEXEC') or die('Restricted access');
?>
<script type="text/javascript">
function openWindow (Adresse) {
myWindow = window.open(Adresse, "Kitap", "width=450,height=325,left=150,top=200");
myWindow.focus();
}
</script>
<h1><?php echo "Baslik"; ?></h1>
<ul>
<?
// Kayitlari diziye aktar
foreach ($this->rows as $row) {
?>
<li><?php echo $row->kitap_ismi; ?> <small><em> (<?php echo $row->yazar; ?>)</em></small> <small><em> (<?php echo $row->isbn_no; ?>)</em></small><br>
<a href="<?php echo $row->buyuk_foto; ?>" onclick="openWindow(this.href); return false"> <img src=<?php echo $row->kucuk_foto; ?>></a>
</li>
<?php
}
?>
</ul>
kod: /components/com_kitap/views/kitap/tmpl/default.php
foreach($this->rows as $row){
?>
<li>
<?php echo $row->kitap_ismi; ?>
<?php echo $row->yazar; ?> <?php echo $row->isbn_no; ?>
<?php echo $row->buyuk_foto; ?>
</li>
<?php
}
?>Bu döngü aslında , şemadaki en önemli bölümdür. Geri kalan ise, HTML ile formatların ayarlanması, ya da örnek kodda olduğu gibi Javascript ile pencere açtırılması gibi işlemlerdir. Bu bölüm isteğe bağlı olarak , örneğin Lightbox efekti gibi eklentileri ile genişletilebilir.
Evet karşımızda yeni bir dosyasımız var, o da Model. Burada soru şu, nasıl veritabanı tablosunda yer alan verilerime ulaşabilirim.
<?php
defined('_JEXEC') or die();
jimport('joomla.application.component.model');
/**
* Kitap bileleni
*
*/
class KitapModelKitap extends JModel
{
function _getKitapQuery( &$options )
{
$db = JFactory::getDBO();
$id = @$options['id'];
$select = 'a.*';
$from = '#__kitap AS a';
$wheres[] = 'a.published = 1';
$query = "SELECT " . $select .
"\n FROM " . $from .
"\n WHERE " . implode( "\n AND ", $wheres );
return $query;
}
function getKitapList( $options=array() )
{
$query = $this->_getKitapQuery( $options );
$result = $this->_getList( $query );
return @$result;
}
}
?>
kod: /components/com_kitap/models/kitap.php
Modelde iki adet çok önemli metot vardır. Bunlardan bir tanesi SQL kodu içeren ve verilere erişimi gerçekleştiren _getKitapQuery ve bu erişimi yürüten ve sonucu geri gönderen getKitapList metodudur. views.html.php dosyasını eğer hala hatırlıyorsanız, orada aşağıdaki gibi bir satır yer almaktaydı:
$rows = $model->getKitapList();
Bu satır model nesnesine erişir ve sonucu $rows değişkenine aktarır. KitapModelKitap sınıfında, değerlerin geri gönderilmesi , getKitapList metodu yardımı ile gerçekleştirilir.
Comments
Post new comment