Oft reichen für die normalen Magento-Funktionen zur Erstellung eines wirklich individuellen Onlineshops nicht aus. Dieses Tutorial zeigt, wie Magento "core-Klassen" richtig überschrieben und verändert werden.
Die hier gezeigte Lösung funktioniert für Block- und Model-Klassen, Controller werden etwas anders behandelt und bekommen daher ein eigenes Tutorial.
Ziel dieses Tutorials ist es, die Funktion der Datei
"app/code/core/Mage/Catalog/Block/Breadcrumbs.php" zu überschreiben. Dazu haben wir zwei Möglichkeiten:
1. Die schnelle Lösung
Um schnell und unkompliziert eine Funktion zu verändern genügt es die Datei Breadcrumbs.php inkl. Verzeichnisbaum nach
"app/code/local" zu kopieren.
Der vollständige Pfad sollte am Ende so aussehen:
"app/code/local/Mage/Catalog/Block/Breadcrumbs.php". - Jede Veränderung des Quellcodes wirkt sich, sofern der Cache deaktiviert wurde, sofort auf den Shop aus.
2. Die saubere Lösung
Da die 1. Lösung einige Nachteile mit sich bringt und nur schwer weiterzugeben ist, wollen wir nun ein Modul für die Änderungen erstellen. Dieses Modul kann später auch exportiert und über MagentoConnect der ganzen Comunity zugänglich gemacht werden.
Als erstes erstellen wir unterhalb von
"app/code/local" einen Arbeitsordner. Diesen Ordner nennen wir "Rackspeed", damit wir später wissen wo wir unsere Änderungen bzw. Module wiederfinden. - Wichtig hierbei ist die Schreibweise: 1. Buchstabe groß, der Rest klein.
In diesem Ordner erstellen wir einen weiteren Order mit dem Namen unseres Moduls, z.B. "BreadStop". Als nächstes werden zwei weitere Ordner in dem soeben erstellten Ordner erstellt: "etc" und "Catalog".
"etc" nimmt die Konfigurationsdatei "config.xml" unseres Moduls auf, "Catalog" leiten wir vom originalen Pfad der zu überschreibenden Funktion ab. Im "Catalog"-Ordner erstellen wir wiederum einen Ordner mit dem Namen "Blocks" welcher ebenfalls vom originalen Pfad abgeleitet wird. Abschließend kopieren wir die Datei "Breadcrumbs.php" in diesen Ordner.
Das Ganze sollte nun wie folgt aussehen:
Code:
app/code/local/Rackspeed/BreadStop/Catalog/Block/Breadcrumbs.php
app/code/local/Rackspeed/BreadStop/etc/config.xml
Nun füllen wir die soeben erstellte leere Konfigurationsdatei wie folgt. - Sollte Ihr Modul einen anderen Namen haben, ist dieser entsprechend zu ersetzen:
Code:
<?xml version="1.0"?>
<config>
<modules>
<Rackspeed_BreadStop>
<version>0.1.0</version>
</Rackspeed_BreadStop>
</modules>
<global>
<blocks>
<catalog>
<rewrite>
<breadcrumbs>Rackspeed_BreadStop_Catalog_Block_Breadcrumbs</breadcrumbs>
</rewrite>
</catalog>
</blocks>
</global>
</config> Als nächstes bearbeiten wir die "Breadcrumbs.php" Datei, dabei entfernen wir zunächst sämtlichen Quellcode den wir nicht benötigen und ändern den Namen der Klasse von:
Code:
class Mage_Catalog_Block_Breadcrumbs extends Mage_Core_Block_Template
zu
Code:
class Rackspeed_Breadstop_Catalog_Block_Breadcrumbs extends Mage_Core_Block_Template
Jetzt können wir die eigentliche Funktion anpassen und verändern. In diesem Beispiel werden wir den "Home"-Link ausblenden. Die veränderte Datei sieht nach der Bearbeitung (entsprechende Zeilen wurden auskommentiert) so aus:
PHP-Code:
<?php
class Rackspeed_Breadstop_Catalog_Block_Breadcrumbs extends Mage_Core_Block_Template
{
protected function _prepareLayout()
{
if ($breadcrumbsBlock = $this->getLayout()->getBlock('breadcrumbs')) {
/*$breadcrumbsBlock->addCrumb('home',
array('label'=>Mage::helper('catalog')->__('Home'), 'title'=>Mage::helper('catalog')->__('Go to Home Page'), 'link'=>Mage::getBaseUrl())
);*/
$title = (string)Mage::getStoreConfig('system/store/name');
$path = Mage::helper('catalog')->getBreadcrumbPath($this->getCategory());
foreach ($path as $name=>$breadcrumb) {
$breadcrumbsBlock->addCrumb($name, $breadcrumb);
$title = $breadcrumb['label'].' '.Mage::getStoreConfig('catalog/seo/title_separator').' '.$title;
}
if ($headBlock = $this->getLayout()->getBlock('head')) {
$headBlock->setTitle($title);
}
}
return parent::_prepareLayout();
}
}
?>
Bevor wir unsere Arbeit begutachten können müssen wir Magento noch mitteilen, dass ein neues Modul vorhanden ist und aktiviert werden soll. Dazu erstellen wir unter:
"app/etc/modules/" eine neue Datei mit dem Namen "Rackspeed_BreadStop.xml". In diese Datei fügen wir nun folgenden Inhalt ein:
Code:
<?xml version="1.0"?>
<config>
<modules>
<Rackspeed_BreadStop>
<active>true</active>
<codePool>local</codePool>
</Rackspeed_BreadStop>
</modules>
</config> Jetzt können wir das Frontend aufrufen und das Modul testen. Wenn alles geklappt hat sollte der Home-Link nicht mehr in der Breadcrumb-Navi angezeigt werden. - Zur Kontrolle kann in der Datei
"app/etc/modules/Rackspeed_BreadStop.xml" der Schalter von "true" auf "false" geändert werden um das Modul zu deaktivieren.
Das komplette Modul wurde als ZIP-Datei angehängt, und kann als Grundlage für neue Module genutzt werden, oder um die eigene Arbeit zu kontrollieren.
Da dies mein erstes Tutorial ist freue ich mich über jede Art von Feedback.