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

Yönetici Arayüzü

Verilerin, önyüzde ziyaretçilere  gösterimi, verilerin yönetimine göre nispeten daha basittir.  Burada yönetici olarak, verilerinizin girişini yapabilmeli, değiştirebilmeli, silebilmeli ya da yayınlama gibi bazı ödevleri yerine getirmeniz gerekebilir. Bu da, basit bir listelemeye göre daha fazla kullanıcı ile etkilşeim halinde olan bir form geliştirmeyi zorunlu kılar. 

Bileşen tablosu

Joomla!, tüm bileşen menü öğelerini jos_components tablosunda saklar ve yönetim buradan gerçekleşir. com_kitap  öğesi de bu tablo içinde yer alır.

 

bununla beraver , menü öğesinde , bileşen isminin yanında gözükecek olan grafikte belirtilir.  ('js/ThemeOffice/component.png').  Grafikler [Joomla_dizini]/includes/js/ThemeOffice dizini içerisinde yer alır.  


Yönetici bileşeni  de , önyüzde olduğu gibi birden fazla farklı dosyadan oluşur. Dizin yapısı ve gerekli dosyalar, [joomla_dizini]/administration/components/com_kitap/ dizininde yer alır: gibidir:  

 

  • /administration/components/admin.kitap.php

  • /administration/components/controller.php

  • /administration/components/controllers/kitap.php

  • /administration/components/views/kitaplar/view.html.php

  • /administration/components/views/kitaplar/tmpl/default.php

  • /administration/components/views/kitap/view.html.php

  • /administration/components/views/kitap/tmpl/form.php

  • /administration/components/tables/kitap.php

  • /administration/components/install.sql

  • /administration/components/uninstall.sql

Giriş (/administration/components/admin.kitap.php)

Yönetici arayüzü de yine, önyüzde olduğu gibi bir girişe sahiptir.

<?php
defined('_JEXEC') or die('Restricted access');
require_once (JPATH_COMPONENT.DS.'controller.php');
if($controller = JRequest::getVar('controller', 'kitap')) {
require_once (JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php');
}
$classname = 'KitaplarController'.$controller;
$controller = new $classname( );
$controller->execute( JRequest::getVar('task'));
$controller->redirect();

?>

 

Controller (/administration/components/controller.php)

Controller kodumuzda size pek yabancı gelmeyecektir.

<?php

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

class KitaplarController extends JController
{
function display()
{
parent::display();
}

}
?>


Bir Controller daha (/administration/components/controllers/kitap.php)

Bu noktada yeni bir controller karşımıza çıkıyor.

<?php
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die();

class KitaplarControllerKitap extends KitaplarController
{
/**
* constructor (registers additional tasks to methods)
* @return void
*/
function __construct()
{
parent::__construct();

// Register Extra tasks
$this->registerTask( 'add' , 'edit' );
$this->registerTask( 'unpublish', 'publish');
}

/**
* display the edit form
* @return void
*/
function edit()
{
JRequest::setVar( 'view', 'kitap' );
JRequest::setVar( 'layout', 'form' );
JRequest::setVar('hidemainmenu', 1);

parent::display();
}

/**
* save a record (and redirect to main page)
* @return void
*/
function save()
{
$model = $this->getModel('kitap');

if ($model->store($post)) {
$msg = JText::_( 'Kitap kaydedildi!' );
} else {
$msg = JText::_( 'Kayıt sırasında hata oluştu' );
}

//
$link = 'index.php?option=com_kitap';
$this->setRedirect($link, $msg);
}

/**
* remove record(s)
* @return void
*/
function remove()
{
$model = $this->getModel('kitap');
if(!$model->delete()) {
$msg = JText::_( 'Hata: Kayıt silinemedi' );
} else {
$msg = JText::_( 'Kitap(lar) silindi' );
}

$this->setRedirect( 'index.php?option=com_kitap', $msg );
}


/**
* Publishes or Unpublishes one or more records
* @param array An array of unique category id numbers
* @param integer 0 if unpublishing, 1 if publishing
* @param string The current url option
*/
function publish()
{
$this->setRedirect( 'index.php?option=com_kitap' );

// Initialize variables
$db =& JFactory::getDBO();
$user =& JFactory::getUser();
$cid = JRequest::getVar( 'cid', array(), 'post', 'array' );
$task = JRequest::getCmd( 'task' );
$publish = ($task == 'publish');
$n = count( $cid );

if (empty( $cid )) {
return JError::raiseWarning( 500, JText::_( 'Kayıt seçiilmedi' ) );
}

JArrayHelper::toInteger( $cid );
$cids = implode( ',', $cid );

$query = 'UPDATE #__kitap'
. ' SET published = ' . (int) $publish
. ' WHERE id IN ( '. $cids .' )'
;
$db->setQuery( $query );
if (!$db->query()) {
return JError::raiseWarning( 500, $row->getError() );
}
$this->setMessage( JText::sprintf( $publish ? 'Kayıtlar yayınlandı' : 'Kayıtlar yayından kaldırıldı', $n ) );

}



/**
* cancel editing a record
* @return void
*/
function cancel()
{
$msg = JText::_( 'İşlem iptal edildi' );
$this->setRedirect( 'index.php?option=com_kitap', $msg );
}
}
?>


Burada düzenle, kaydet, sil, yayınla ve iptal metotları yer almaktadır. Bu metotlar içinde model nesnesi oluşturulur ve ihtiyaç duyuldukça , store metodunda olduğu gibi model içerisinden çağrılır. Statik sınıflar Jtext ve Jerror üzerinden, işlemin başarılı olup olmadığı hakkındaki mesajlar gönderilir.

 

Liste için View (/administration/components/views/kitaplar/view.html.php)

Bu sefer ki View'ımız  biraz daha büyükçe , çünkü araç çubuğu (toolbar) eklemek gerekiyor.

<?php

// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die();

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

/**
* Kitaplar View
*
* @package
* @subpackage Components
*/
class KitaplarViewKitaplar extends JView
{
/**
* Kitaplar view display method
* @return void
**/
function display($tpl = null)
{
JToolBarHelper::title( JText::_( 'Kitap Yöneticisi' ), 'generic.png' );
JToolBarHelper::addNewX();
JToolBarHelper::editListX();
JToolBarHelper::publishList();
JToolBarHelper::unpublishList();
JToolBarHelper::deleteList();

// Get data from the model
$items = & $this->get( 'Data');

$this->assignRef('items', $items);


parent::display($tpl);
}
}

kod: /administration/components/views/kitaplar/view.html.php


JToolbar-Helper sınıfı bu ödevi yerine getirir.

Liste teması(/administration/components/views/kitaplar/tmpl/default.php)

Tabi ki listeninde formatlanması gerekiyor. Bu amaç için standart tema kullanılabilir.


Form View (/administration/components/views/kitap/view.html.php)

Kitap kayıtlarınızın detayını görüntleyebilmek içinde birşeyler yapmanız gerekiyor. Aşağıdaki kodla bunu gerçekleştirebiliryoruz. 

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



<form action="index.php" method="post" name="adminForm">
<div id="editcell">
<table class="adminlist">
<thead>
<tr>
<tr>
<th width="7">
<?php echo JText::_( 'NUM' ); ?>
</th>
<th width="20">
<input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count( $this->items ); ?>);" />
</th>
<th class="title">
<?php echo JHTML::_('grid.sort', 'Kitap', 'a.kitap_ismi', @$lists['order_Dir'], @$this->lists['order'] ); ?>
</th>
<th class="title">
<?php echo JHTML::_('grid.sort', 'Yazar', 'a.yazar', @$lists['order_Dir'], @$this->lists['order'] ); ?>
</th>
<th class="title">
<?php echo JHTML::_('grid.sort', 'ISBN No', 'a.isbn_no', @$lists['order_Dir'], @$this->lists['order'] ); ?>
</th>
<th width="5%" align="center">
<?php echo JHTML::_('grid.sort', 'Published', 'a.published', @$this->lists['order_Dir'], @$this->lists['order'] ); ?>
</th>
<th width="1%" nowrap="nowrap">
<?php echo JHTML::_('grid.sort', 'ID', 'a.id', @$this->lists['order_Dir'], @$this->lists['order'] ); ?>
</th>
</tr>

</thead>
<?php
$k = 0;
for ($i=0, $n=count( $this->items ); $i < $n; $i++)
{
$row = &$this->items[$i];

$published = JHTML::_('grid.published', $row, $i );
$checked = JHTML::_('grid.id', $i, $row->id );
$link = JRoute::_( 'index.php?option=com_kitap&controller=kitap&task=edit&cid[]='. $row->id );

?>
<tr class="<?php echo "row$k"; ?>">
<td>
<?php echo $row->id; ?>
</td>
<td>
<?php echo $checked; ?>
</td>
<td>
<a href="<?php echo $link; ?>"><?php echo $row->kitap_ismi; ?></a>
</td>
<td>
<?php echo $row->yazar; ?>
</td>
<td>
<?php echo $row->isbn_no; ?>
</td>
<td align="center">
<?php echo $published;?>
</td>
<td align="center">
<?php echo $row->id; ?>
</td>
</tr>
<?php
$k = 1 - $k;
}
?>
</table>
</div>

<input type="hidden" name="option" value="com_kitap" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<input type="hidden" name="controller" value="kitap" />
</form>


Listelemede , kayıt görüntüleme için  de araç çubuğu oluşturuluyor.  Bu form  hem kayıt eklemek, hem de varolan kaydı değiştirmekle görevlidir. $isNew değişkeni bu iki ödevi ayırdedebilmek için kullanılır.

Template-Tema Formu  (/administration/components/views/kitap/tmpl/form.php)

Detay görüntüleme formunun nasıl görüntüleneceği, bu standart temada inşa edilmiştir.

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

<script language="javascript" type="text/javascript">
function submitbutton(pressbutton) {
var form = document.adminForm;
if (pressbutton == 'cancel') {
submitform( pressbutton );
return;
}
// do field validation
if (form.kitap_ismi.value == "") {
alert( "<?php echo JText::_( 'Kitaba ait bir metin olmak zorundadir', true ); ?>" );
} else {
submitform( pressbutton );
}
}
</script>

<form action="index.php" method="post" name="adminForm" id="adminForm">
<div>
<fieldset class="adminform">
<legend><?php echo JText::_( 'Detaylar' ); ?></legend>
<table class="admintable">
<tr>
<td width="110" class="key">
<label for="title">
<?php echo JText::_( 'Kitap Adi' ); ?>:
</label>
</td>
<td>
<input class="inputbox" type="text" name="kitap_ismi" id="kitap_ismi" size="60" value="<?php echo $this->kitap->kitap_ismi; ?>" />
</td>
</tr>
<tr>
<td width="110" class="key">
<label for="alias">
<?php echo JText::_( 'Yazar' ); ?>:
</label>
</td>
<td>
<input class="inputbox" type="text" name="yazar" id="yazar" size="60" value="<?php echo $this->kitap->yazar; ?>" />
</td>
</tr>
<tr>
<td width="110" class="key">
<label for="alias">
<?php echo JText::_( 'ISBN_No' ); ?>:
</label>
</td>
<td>
<input class="inputbox" type="text" name="isbn_no" id="isbn_no" size="60" value="<?php echo $this->kitap->isbn_no; ?>" />
</td>
</tr>
<tr>
<td class="key">
<label for="lag">
<?php echo JText::_( 'Küçük foto(120px)' ); ?>:
</label>
</td>
<td>
<input class="inputbox" type="text" name="kucuk_foto" id="kucuk_foto" size="60" value="<?php echo $this->kitap->kucuk_foto; ?>" />
<?php echo JText::_( '(Lütfen fotografin bulundugu bir url adresi girin)' ); ?>
</td>
</tr>
<tr>
<td colspan="2">
<?php if ($this->kitap->kucuk_foto){?>
<img src="<?php echo $this->kitap->kucuk_foto; ?>">
<?php } ?>
</td>
</tr>
<tr>
<td class="key">
<label for="lag">
<?php echo JText::_( 'Büyük foto(350px)' ); ?>:
</label>
</td>
<td>
<input class="inputbox" type="text" name="buyuk_foto" id="buyuk_foto" size="60" value="<?php echo $this->kitap->buyuk_foto; ?>" />
<?php echo JText::_( '(Lütfen fotografin bulundugu bir url adresi girin)' ); ?>
</td>
</tr>
<tr>
<td colspan="2">
<?php if ($this->kitap->buyuk_foto){?>
<img src="<?php echo $this->kitap->buyuk_foto; ?>">
<?php } ?>
</td>
</tr>
<tr>
<td width="120" class="key">
<?php echo JText::_( 'Yayinda' ); ?>:
</td>
<td>
<?php echo JHTML::_( 'select.booleanlist', 'published', 'class="inputbox"', $this->kitap->published ); ?>
</td>
</tr>
</table>
</fieldset>
</div>
<div class="clr"></div>
<div class="clr"></div>

<input type="hidden" name="option" value="com_kitap" />
<input type="hidden" name="id" value="<?php echo $this->kitap->id; ?>" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="controller" value="kitap" />
</form>

kod: /administration/components/views/kitap/tmpl/form.php


 

Bu form da , yine diğerleri gibi  PHP değişkenleri içeren HTML kodu ve statik sınıf (JText) çağrılarından oluşur.  Formun çalışma esnasındaki görünümü aşağıdaki gibi olacaktır.


 

Kitap tablosu  (/administration/components/tables/kitap.php)

Son olarak tablo sınıfına (class) geldir. Bir şekilde oluşturduğumuz modelimizin hangi veriler ile çalışağını bilmesi gerekiyor.  JTable-sınıfı veriye erişimi ve değişiklik işlemlerini oldukça kolaylaştırmaktadır.  Bu soyut (abstract ya da bir ınterface - arayüz) bir sınıftır ve  bu sınıfa uzatılan (extend) sınıfların , sahip olduğu metot yağısını kullanmasını sağlar.  Yapılandırıcı (constructor) bölümünde tablo ismi ve birincil anahtarlar (primary keys)  tanımlanır.

<?php

// no direct access
defined('_JEXEC') or die('Restricted access');

class TableKitap extends JTable
{
/** @var int Primary key */
var $id = 0;
/** @var string */
var $kitap_ismi = '';
/** @var string */
var $yazar = '';
/** @var string */
var $isbn_no = '';
/** @var string */
var $kucuk_foto = '';
/** @var string */
var $buyuk_foto = '';
/** @var string */
var $published = 0;
/** @var int */

/**
* Constructor
*
* @param object Database connector object
*/
function TableKitap(& $db) {
parent::__construct('#__kitap', 'id', $db);
}
}
?>


Comments

Post new comment

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