Extensions Tutorial: Teil 5 – Admininterface und CRUD (Read)
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.

Vielen Dank für das bisher ausführliche Tutorial, anhand der Beispiele hier kann man das System viel leichter nachvollziehen. Ich hoffe es folgen noch weitere hilfreiche Tutorials!
DANK
War diese Antwort hilfreich?
LikeDislikeDanke für diese Tutorial. Ich schliesse mich da ganz an meinen Vorgänger an
Weisst du ob es in Grids eine Möglickeit gibt eine Saplte direkt zu editieren ohne das Formular aufzurufen?
beste grüße Andreas
War diese Antwort hilfreich?
LikeDislikeIst das eine schwere Geburt mit mir, in Step 4 hatte ich vergessen die config.xml anzupassen und erhielt daher hier nur hässliche Fehlermeldungen.
Da ich mich nicht so schnell entmutigen lasse habe ich noch mal neu angefangen (da wußte ich noch nicht das ich was vergessen hatte).
Nun läufts bestens.
Ich glaube wenn ich bei Thema 10 ankomme, dann kann ich das Tutorial als Live-Vorführung zum Besten geben.
Naja, denke auf jeden Fall das es dem Lerneffekt nicht schadet…
Weiter gehts mit 6.
War diese Antwort hilfreich?
LikeDislikeErstens danke dir für wunderbares Tutorial. ich bin zur Grid-Erstellung ohne Probleme gekommen aber jetzt bekomme ich folgende Fehlermeldung :
Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /opt/lampp/htdocs/magento/app/code/local/Ayalp/Datenbank/controllers/AdminController.php:11) in /opt/lampp/htdocs/magento/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php on line 99
wäre dankbar für weitere Hilfe
Serdar Ayalp
War diese Antwort hilfreich?
LikeDislikehm,
bei mir hakts … die zeile 8 des AdminController.php hat er nicht gern: ” _addContent() must be an instance of Mage_Core_Block_Abstract” – er meint diese müsse im core definiert werden: “defined in /home/httpd/vhosts/smart-e.ch/httpdocs/shop/app/code/core/Mage/Adminhtml/Controller/Action” … wohl nicht ….
War diese Antwort hilfreich?
LikeDislike… geloest: dateistruktur stimmte nicht. sorry!
danke für das super tutorial. bringt mich echt weiter ….
War diese Antwort hilfreich?
LikeDislikeich habe da mal eine Frage ich wollte in das Grid auch noch ein Thumbnail mit hinein bringen. Habe alles gemacht jedoch das “type” => “image” immer als URL catalog/product haben um dort das thumbnail zu öffnen ich brauche aber nur den Pfad zum Media Folder. Habe schon alles probiert, aber ich bekomm das gerade einfach nicht hin vielleicht hat ja einer von euch eine Idee.
Und nur weiter so mit den Tutorials.
War diese Antwort hilfreich?
LikeDislikeAuch wenn ich nicht genau weiß, was die Zeile nun tut, so ist sie falsch bzw. führt zu Fehlern. Jede Zeile in der Grip.php mit ‘filter_index’ => ‘dt.tutorial_id’ muss durch ‘filter_index’ => ‘tutorial_id’ ersetzt werden. Wobei natürlich nicht jedesmal die tutorial_id verwendet werden sollte. Sonst funktioniert das Sortieren der Spalten nicht.
War diese Antwort hilfreich?
LikeDislikehttp://www.mxperts.de/blog/extensions-tutorial-teil-6-crud-create/
War diese Antwort hilfreich?
LikeDislikeElement(s)
Prepare Collection
Fatal error: Call to a member function getCollection() on a non-object in C:\xampp\htdocs\magento\app\code\local\Mxperts\Tutorial\Block\Admin\Main\Grid.php on line 16
Hat jemand eine Ahnung was hier schief läuft? bin noch neu in der Thematik magento
War diese Antwort hilfreich?
LikeDislike