Magento Block überschreiben

Man sollte in der Regel versuchen zu vermeiden Magento Blöcke zu überschreiben,
aber manchmal hat man leider keine andere Wahl.
Magento hat viele Optionen zur Verfügung gestellt um das Überschreiben zu vermeiden.
Man kann in der Regel durch die Templates, Layout Dateien oder durch die Observer an
sein Zeil kommen.
Wir werden in dieser Anleitung einen Block überschreiben, nur um zu zeigen, wie es in der Praxis
funktioniert. Unser Beispielfall könnte man aber definitiv eleganter lösen.

Beispielfall:
Wir wollen in der Navigation wo die Kategorien aufgelistet werden, einen zusätzlichen Link
hinzufügen, als Beispiel ein Link zu dem Kontaktformular. Weiterlesen

Magento Pfade der Verzeichnisse bekommen

Über die Mage Klasse kann man in Magento auf mehrere Hauptverzeichnisse zugreifen.
Liste der Verzeichnisse:

Magento Root Verzeichnis ausgeben:

var_dump(Mage::getBaseDir());

Magento Root Verzeichnis ausgeben:

var_dump(Mage::getBaseDir());

Magento App Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('app'));

Magento Code Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('code'));

Magento Design Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('design'));

Magento Etc Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('etc'));

Magento Lib Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('lib'));

Magento Übersetzung Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('locale'));

Magento Media Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('media'));

Magento Bilder/Javascript/Css(Skin) Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('skin'));

Magento Var Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('var'));

Magento temporäres Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('tmp'));

Magento Cache Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('cache'));

Magento Log Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('log'));

Magento Session Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('session'));

Magento Upload Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('upload'));

Magento Export Verzeichnis ausgeben:

var_dump(Mage::getBaseDir('export'));

Zusätzliche Magento Kategorie Felder anlegen

Bei den Produkten ist es ganz leicht möglich Attribute zu editieren, zu löschen oder neue zu erstellen.
Die Kategorie Attribute kann man aber leider nicht über die Oberfläche in Magento definieren.
Jedoch ist die Datenbank der Kategorien auch schon so angelegt, dass man wie bei den Produkten dynamische
Eigenschaften der Kategorie zuweisen kann.

Wir erstellen jetzt mal eine Testdatei im Magento Root Verzeichnis und fügen folgenden Inhalt rein:

<?php

$mageFilename = '/app/Mage.php';

require_once $mageFilename;

Mage::app();

// Setup
$frontend_label		= 'Neues Attribut'; // Bezeichnung des Attributs
$attribute_code		= 'new_attribute'; // Interner Attribute Code
$group_label		= 'Neuer Tab'; // Name des Tabs in der Kategorieverwaltung
$entityTypeId		= 3; // Kategorie Typ, dieser Wert ist Fix

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');

$setup->addAttribute($entityTypeId, $attribute_code, array(
	'type'		=> 'text',
	'input'		=> 'textarea',
	'label'		=> $frontend_label,
	'required'	=> 0,
	'group'		=> $group_label,
	'global'	=> 0,
));

Jetzt sollte, wenn alles geklappt hat, ein neuer Tab in Kategorien mit dem Label “Neuer Tab” zu finden sein.
In diesem Tab sollte dann auch eine neue Textarea mit dem Label “Neues Attribut” vorhanden sein.

Aktuellen Modulnamen, Controllernamen und Actionnamen herausfinden

Auf jeder Seite kann man abfragen welche Modul/Controller/Action aktuell gefunden und registriert wurde.
Dazu muss man nur folgendeß machen:

// aktueller Modulname
echo Mage::app()->getRequest()->getModuleName();

// aktueller Controllername
echo Mage::app()->getRequest()->getControllerName();

// aktueller Actionname
echo Mage::app()->getRequest()->getActionName();

Produkt mit Standardkategorie

Es beschwerden sich immer mehr Leute, dass in der Produkt Detailseite manchmal keine Kategorie zugeordnet ist.
Das passiert, weil Magento zu einem Produkt mehrere Kategorien haben kann und es manchmal nicht möglich ist, die richtige
Kategorie zum Produkt zu identifizieren.
Diese Problematik könnte unter verschiedenen Situationen passieren, wie z.B. Weiterlesen

The controller for URI “/_fragment” is not callable

Ich hatte heute einen Seltsamen Fehler:

An exception has been thrown during the rendering of a template ("The controller for URI "/_fragment" is not callable.") 

Ich habe versucht in einem Template per render() Befehl einen Controller einzufügen.
Dies hatte diesen Fehler verursacht.

Leider sagt dieser Fehler nicht wirklich was aus.
Nach langem Debuggen hab ich den Fehler gefunden! Ich hatte mich im “render(controller(….” befehlt verschrieben!
Ich habe eine Aktion angegeben welche es nicht gab!

Wenn ihr also diesen Fehler bekommt achtet darauf ob ihr wirklich den Controller/Action Namen korrekt geschrieben habt.
Ich hoffe dies Info erstparrt euch die ewige Suche :) .