Endlich ist es soweit, wir können nun die Daten unserer Tabelle auslesen. Diese möchten wir natürlich anzeigen, Einträge hinzufügen, löschen und bearbeiten.

Wir werden uns in diesem Tutorial nur um die Anzeige im Backend kümmern. In den nachfolgenden Tutorials folgen dann die einzelnen Dateioperationen CRUD (Create Read Update). Delete). Dafür benötigen wir einen Block mit den entsprechend abgeleiteten Klassen und einem anderen AdminController.

1. Dateistruktur anpassen

app/
   etc/
      modules/
        - Mxperts_All.xml (Oder Ihre Firmenname IhreFirme_All.xml)
   code/
      local/
         Mxperts/ (Oder Ihre Firmenname IhreFirme_All.xml)
            Tutorial/ (Bezeichnung Ihrer Erweiterung)
               Block/
                 - Index.php
                 Admin/
                   - Main.php
                   Main/
                     - Grid.php
               controllers/
                 - AdminController.php
                 - IndexController.php
               etc/
                 - config.xml
               Helper/
                 - Data.php
               Model/
                 - Tutorial.php
                 Mysql4/
                   - Tutorial.php
                   Tutorial/
                     - Collection.php
               sql/
                 tutorial_setup/
                    - mysql4-install-0.2.0.php
                    - mysql4-upgrade-0.1.0-0.2.0.php

1. Container für das Grid

Der Container wird benötigt um die Bezeichnungen für Titel und Buttons anzupassen.
Legen Sie die Datei app\code\local\Mxperts\Tutorial\Block\Admin\Main.php an.

<?php
class Mxperts_Tutorial_Block_Admin_Main extends Mage_Adminhtml_Block_Widget_Grid_Container
{
    public function __construct()
    {
        $this->_addButtonLabel = Mage::helper('tutorial')->__('Add New');
        parent::__construct();

        $this->_blockGroup = 'tutorial';
        $this->_controller = 'admin_main';
      	$this->_headerText = Mage::helper('tutorial')->__('Element(s)');
    }
}

Hier sehen Sie auch den Helper in Aktion, der für Übersetzungen benutzt werden kann.

3. Das Grid implementieren

Erstellen Sie die Datei app/code/local/Mxperts/Tutorial/Block/Admin/Main/Grid.php.

<?php

class Mxperts_Tutorial_Block_Admin_Main_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
     public function __construct()
    {
        parent::__construct();
        $this->setId('tutorialGrid');
        $this->_controller = 'tutorial';
    }

    protected function _prepareCollection()
    {
        echo 'Prepare Collection';
        $model = Mage::getModel('tutorial/tutorial');
        $collection = $model->getCollection();
		    $this->setCollection($collection);

        return parent::_prepareCollection();
    }

    protected function _prepareColumns()
    {

        $this->addColumn('tutorial_id', array(
            'header'        => Mage::helper('tutorial')->__('ID'),
            'align'         => 'right',
            'width'         => '50px',
            'filter_index'  => 'dt.tutorial_id',
            'index'         => 'tutorial_id',
        ));

        $this->addColumn('name', array(
            'header'        => Mage::helper('tutorial')->__('Name'),
            'align'         => 'left',
            'width'         => '150px',
            'filter_index'  => 'dt.name',
            'index'         => 'name',
            'type'          => 'text',
            'truncate'      => 50,
            'escape'        => true,
        ));

        $this->addColumn('summary', array(
            'header'        => Mage::helper('tutorial')->__('Summary'),
            'align'         => 'left',
            'filter_index'  => 'dt.summary',
            'index'         => 'summary',
            'type'          => 'text',
            'escape'        => false,
        ));

        $this->addColumn('tags', array(
            'header'    	=> Mage::helper('tutorial')->__('Tags'),
            'align'         => 'left',
            'filter_index'  => 'dt.tags',
            'index'    	 	=> 'tags',
            'type'     	 	=> 'text',
            'escape'		=> true,
        ));

        $this->addColumn('action',
            array(
                'header'    => Mage::helper('tutorial')->__('Action'),
                'width'     => '150px',
                'type'      => 'action',
                'getter'	=> 'getTutorialId',
                'actions'   => array(
                    array(
                        'caption' => Mage::helper('tutorial')->__('Edit'),
                        'url'     => array(
                            'base'=>'*/*/edit'
                         ),
                         'field'   => 'id'
                    ),
                    array(
                        'caption' => Mage::helper('tutorial')->__('Delete'),
                        'url'     => array(
                            'base'=>'*/*/delete'
                         ),
                         'field'   => 'id'
                    )
                ),
                'filter'    => false,
                'sortable'  => false
        ));

        return parent::_prepareColumns();
    }

    public function getRowUrl($row)
    {
        return $this->getUrl('*/*/edit', array(
            'id' => $row->getTutorialId(),
        ));
    }
}

Hier sehen Sie, wie man die einzelnen Datenbankfelder als Spalten in ein Grid integrieren kann. In einem späteren Tutorial möchte ich noch genauer auf die ganzen Parameter und deren Bedeutung eingehen. Erstmal wollen wir schnellst möglich zu einem sichbaren Ergebnis gelangen – das fördert die Motivation :-) .

4. adminController.php anpassen

Zu guter Letzt passen wir noch die Datei app/code/local/Mxperts/Tutorial/controllers/adminController.php an damit anstatt “Hello Magento” unser Grid angezeigt wird.

<?php
class Mxperts_Tutorial_AdminController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
		$this->loadLayout()
			->_addContent($this->getLayout()
                           ->createBlock('tutorial/admin_main'))
			->renderLayout();
    }
}

Wir haben es geschafft – erste sichtbare Erfolge sind im Backend vorhanden.
ext_tut_grid01

Extensions Tutorial: Teil 4 – Model

Extensions Tutorial: Teil 6 – CRUD (Create)