Magento – Erweiterung der Produktübersicht (productGrid) im Backend

Unter Catalog » Manage Products bzw. Katalog » Artikel/Produkte verwalten werden alle Produkte des Shops aufgelistet. Eine Erweiterung dieser Übersicht (Hinzufügen neuer Spalten) kann mit Hilfe des folgenden Overrides umgesetzt werden.

Das Raster wird u. a. durch diese Datei generiert und dient somit als Basis für das Override.

./app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php

Da Core-Dateien NICHT angepasst werden sollten, wird diese Datei in den local-Ordner kopiert.

./app/code/local/Mage/Adminhtml/Block/Catalog/Product/Grid.php

Diese Datei wird nun entsprechend angepasst.

Beispiel #1 – Erweiterung um die Ausgabe des Produktbildes (Small Image)

Die folgende Abbildung zeigt erst einmal die aktuelle Produktauflistung.
Abb. 1
magento-adminhtml-product-grid-default
Im ersten Schritt wird die Funktion protected function _prepareColumns(){} um die Spalte Small Image erweitert.

protected function _prepareColumns()
{
$this->addColumn('entity_id',
array(
'header'=> Mage::helper('catalog')->__('ID'),
'width' => '50px',
'type'  => 'number',
'index' => 'entity_id',
));
/* BO Column Small Image */
$this->addColumn('product_small_image',
array(
'header'=> Mage::helper('catalog')->__('Small Image'),
'width' => '60px',
));
/* EO Column Small Image */
$this->addColumn('name',
array(
'header'=> Mage::helper('catalog')->__('Name'),
'index' => 'name',
));
[...]
return parent::_prepareColumns();
}

Im Backend kann man schon feststellen, dass die Auflistung entsprechend erweitert wurde.
Abb. 2
magento-adminhtml-product-grid-default-plus-column-small-image
Im nächsten Schritt werden die Eigenschaften der Spalte angepasst.

$this->addColumn('product_small_image',
array(
'header'=> Mage::helper('catalog')->__('Small Image'),
'align' => 'center',
'width' => '60px',
// Rendering der Ausgabe
'renderer'  => 'Mage_Adminhtml_Block_Catalog_Product_Renderer_SmallImage',
// Deaktivierung der Filterung
// (Entfernt das Eingabefeld unter der Spaltenüberschrift.)
'filter'    => false,
// Deaktivierung der Sortierung
'sortable'  => false,
));

Zur Generierung des Spalten-Inhalts muss noch eine entsprechende Datei ./app/code/local/Mage/Adminhtml/Block/Catalog/Product/Renderer/SmallImage.php angelegt werden.
Sofern diese Datei noch nicht vorhanden ist, wird folgende Fehlermeldung ausgegeben:
Abb. 3
magento-adminhtml-product-grid-default-plus-column-small-image-error-01
Nach Anlegen der Datei (leer) wird folgende Fehlermeldung ausgegeben:
Abb. 4
magento-adminhtml-product-grid-default-plus-column-small-image-error-02
Nun wird die SmallImage.php angepasst.

class Mage_Adminhtml_Block_Catalog_Product_Renderer_SmallImage
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
public function render(Varien_Object $row)
{
$_product = Mage::getModel('catalog/product')->load($row->getEntityId());			
if($_product->getSmallImage() != 'no_selection'):
$image = "<img src='".Mage::helper('catalog/image')->init($_product, 'small_image')->resize(60)."' title='".$_product->getName()."' />";
else:
$image = Mage::helper('catalog')->__('No Small Image!');
endif;
return $image;
}
}

Und so sieht die neue Auflistung der Produkte aus.
Abb. 5
magento-adminhtml-product-grid-default-plus-column-small-image-final
Anhand dieser Ansicht, kann man nun erkennen, bei welchen Produkten ein Small Image (Dieses Bild wird standardmäßig in der Kategorieansicht angezeigt.) ausgewählt wurde.

Und hier noch einmal die Übersicht der Ordner/Dateien:
Abb. 6
magento-adminhtml-product-grid-default-plus-column-small-image-final-ordner-datei-struktur

Beispiel #2 – Überprüfung der Meta Informationen

Beim nächsten Beispiel soll in der Produktauflistung sofort ersichtlich sein, ob die Meta Informationen (Meta Title, Meta Description & Meta Keywords) hinterlegt wurden.
Dazu wird die Datei ./app/code/local/Mage/Adminhtml/Block/Catalog/Product/Grid.php ein weiteres Mal angepasst:

/* BO Column Meta Information */
$this->addColumn('product_meta_info_check',
array(
'header'=> Mage::helper('catalog')->__('Meta Check'),
'align' => 'center',
'width' => '40px',
'renderer'  => 'Mage_Adminhtml_Block_Catalog_Product_Renderer_MetaInfoCheck',
'filter'    => false,
'sortable'  => false,
));		
/* EO Column Meta Information */

Dann benötigen wir wieder eine Datei für das Rendern: ./app/code/local/Mage/Adminhtml/Block/Catalog/Product/Renderer/MetaInfoCheck.php

class Mage_Adminhtml_Block_Catalog_Product_Renderer_MetaInfoCheck
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
public function render(Varien_Object $row)
{
$_product = Mage::getModel('catalog/product')->load($row->getEntityId());
$divTrue = '<div style="width:15px;height:10px;background:#66cc33;display:block;float:left;margin:0 2px 0 2px;" title="';
$divFalse = '<div style="width:15px;height:10px;background:#ff6633;display:block;float:left;margin:0 2px 0 2px;"></div>';
if($_product->getMetaTitle()):
$metaTitle = $divTrue.$_product->getMetaTitle().'"></div>';
else:
$metaTitle = $divFalse;
endif;
if($_product->getMetaDescription()):
$metaDesc = $divTrue.$_product->getMetaDescription().'"></div>';
else:
$metaDesc = $divFalse;
endif;
if($_product->getMetaKeyword()):
$metaKW = $divTrue.$_product->getMetaKeyword().'"></div>';
else:
$metaKW = $divFalse;
endif;
$metaInfo = '<div>'.$metaTitle.$metaDesc.$metaKW.'</div>';
return $metaInfo;
}
}

Und so sieht das Listing nach der Anpassung aus.
Abb. 7
magento-adminhtml-product-grid-default-plus-column-meta-info-check-final

Und so hat sich die Struktur der Ordner/Dateien entwickelt:
Abb. 8
magento-adminhtml-product-grid-default-plus-column-meta-info-final-ordner-datei-struktur
PS: Die Ordner code/core und code/communtiy sind natürlich immer noch da ;)

Informationen
BO … BEGIN OF
EO … END OF
Umsetzung: Magento CE 1.7.0.2

Schreibe einen Kommentar

* Pflichtfelder