try another color:
try another fontsize: 60% 70% 80% 90%
JoomKitap
Özgür ve Açık Joomla Kaynağınız

Önyüz

Ö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.

 

Başlangıç  (/components/com_kitap/kitap.php)

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.

Controller (/components/com_kitap/controller.php)

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();
}
}

View (/components/com_kitap/views/kitap/view.html.php)

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.

Template (/components/com_kitap/views/kitap/tmpl/default.php)

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.  

Model (/components/com_kitap/models/kitap.php)

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

The content of this field is kept private and will not be shown publicly.