Aktuelles

26. Januar 2012

Magento: _init()-Methode im Kontext von Entity-, Resource- und Collection-Models

Gelegentlich ergibt sich bei Magento das Problem, das gleichlautende Methoden in verschiedenen Kontexten verschiedene Parameter erwarten und letztlich auch Verschiedenes tun. Ein Beispiel ist die _init()-Methode wie sie in den (Entity-)Models, Resource- und Collection-Models zum Einsatz kommt.

_init() im Entity-Model-Kontext:
Im Entity-Model Kontext dient die _init()-Methode dazu, ein Entity-Model mit einem bestimmten Resource-Model zu “verknüpfen”. Der mittels der _init()-Methode übergebe String wir später über die config.xml des Moduls auf die entsprechende Klasse gemappt und per Mage::getResourceSingleton() instantiiert. Die _init()-Methode erwartet dementsprechend den in der config.xml definierten Model-Group-Name gefolgt vom Dateifpad zur zugehörigen Resource-Model-Datei. Beispielsweise also:

protected function _construct()
{
   $this->_init('sales/order');
}

Hier würde Magento in der config.xml nach dem Model-Group-Name “sales” suchen, dann das zugehörige Resource-Model-Classname-Prefix auslesen und schließlich die angegebene Pfadangabe auf das Dateisystem umsetzen.

_init() im Resource-Model-Kontext:
Im Resource-Model-Kontext wird der _init()-Methode hingegen eine Entität gefolgt von der Angabe der Tabellenspalte übergeben, die die Entitäts-ID beinhaltet. Die zu einem Modul zugehörigen Entitäten sind wiederum in der config.xml im Pfad global/models/resource_model_group_name/entities/name_der_entität festgelegt. Ein entsprechender Aufruf lautet also:

protected function _construct()
{
   $this->_init('sales/order', 'entity_id');
}

_init() im Collection-Model-Kontext:
Im Collection-Model-Kontext wird der _init()-Methode das zugehörige Entity-Model bekannt gemacht. Später wird dann für jedes ausgelesene Tupel ein Model-Objekt der entsprechenden Klasse instantiiert und die Werte per setData() auf das Objekt übertragen. Ein Aufruf entpsrechend unseres Beispiels sieht wie folgt aus:

protected function _construct()
{
   $this->_init('sales/order');
}
23. Januar 2012

Magento & EcomDev PHPUnit: Fixtures werden nicht geladen

Magento-Entwickler, die ihre Extensions per TDD (Test-Driven-Development) entwickeln und dazu die Magento-PHPUnit-Extension von EcomDev nutzen, haben vielleicht schon Probleme mit dem Laden von Fixtures über die entsprechende “@loadFixture”-Annotation gehabt.

Sofern in der Testklasse eine eigene Setup-Methode definiert ist, gelingt das Laden der Fixtures nur, wenn am Ende die Eltern-Methode aufgerufen wird. In ihr werden die nötigen Fixtures überhaupt erst geladen. Eine mögliche Setup-Methode sieht daher wie folgt aus:

public function setUp()
{
 // eigener Setup-Code ...
 parent::setUp();
}
15. Dezember 2011

Magento: Verwendete Action-Controller-Kombination im Frontend herausfinden

Die CSS-Klasse im Body-Tag verrät die aktuelle Modul-Controller-Action-Kombination. Hier: cms/index/index

Die CSS-Klasse im Body-Tag verrät die aktuelle Modul-Controller-Action-Kombination. Hier: cms/index/index

Bedingt durch Magentos URL-Rewriting im Frontend ist es meist nicht auf den ersten Blick ersichtlich, welche Modul-Controller-Action-Kombination für die aktuelle Ausgabe verantwortlich ist.

Tipp: Ein Blick in die CSS-Klasse des Body-Tags im HTML-Quellcode verrät meist die aktuelle Modul-Controller-Action-Kombination.

02. Dezember 2011

Typo3-Weihnachtskalender-Extension auf Extbase/Fluid-Basis

Typo3-Weihnachstkalener-Extension auf Extbase/Fluid-Basis

Typo3-Weihnachstkalener-Extension auf Extbase/Fluid-Basis

Unsere neue Typo3-Extension “cgadventcalendar” implementiert einen einfachen Weihnachtskalender mit 24 Kläppchen.

Der Clou: Klickt man mehrmals auf ein Kläppchen zukünftigen Datums, wird eine von fünf Audiodateien abgespielt. Beim ersten Klick wird jeweils per Zufall eine Datei aus den ersten drei Audiofiles ausgewählt. Beim zweiten und dritten Klick gibt es dann eine dramaturgische Steigerung.

Die Umsetzung der Typo3-Weihnachtskalender-Extension erfolgte auf Extbase/Fluid-Basis. Für die Umsetzung der Audio-Funktionalität setzten wir auf “Soundmanager 2“.

Die einzelnen Kläppchen lassen sich im Backend komfortabel per IRRE (Inline Relational Record Editing) mit zwei Zustandsgrafiken für die Kläppchen sowie beliebigen Typo3-Content-Elementen bestücken.

15. November 2011

Jetzt Donnerstag: 1.Magento-Stammtisch in Münster

Hier nochmal eine kleine Erinnerung an den kommenden Magento-Stammtisch in Münster:

www.magento-stammtisch-muenster.de

13. Oktober 2011

Lebewohl Zend Studio

Gibt es ein Leben nach "Building workspace"?

Gibt es ein Leben nach "Building workspace"?

Prinzipiell bin ich der Meinung, ein Entwickler sollte seine Entwicklungsumgebung nicht ohne triftigen Grund wechseln. Schließlich ist das hart erworbene Wissen um die Tipps und Tricks der eigenen IDE Gold wert.

Nach Jahren der Entwicklung unter Zend Studio ist dieser Punkt für mich nun recht überraschend erreicht. Ich wusste zwar schon immer, dass Zend Studio ein gewisses Eigenleben führt und sich viel lieber der Aktualisierung des Workspace und dem DLTK-Indexing widmet, als seinem Entwickler – also mir – seine volle Aufmerksamkeit zu schenken. Aber heute hat sich meine IDE entschlossen, sich in einer Endlosschleife ganz und gar der Aktualisierung des Workspace zu widmen. Klarer kann ein Zeichen für wechselwillige Entwickler eigentlich nicht sein.

Zum Glück bin ich meinem Zend Studio schon früher mehrmals fremdgegangen – mit PhpStorm. Ich hatte einfach irgendwann erkannt, dass ich die Zeit, die mein Zend Studio jeden Tag zum Starten benötigt, schon mal nutzen kann, um die ersten Zeilen Code des Tages in PhpStorm niederzuschreiben. Ich bin mir zudem sicher, dass sich Zend Studio auch als ultimativer Benchmark für QuadCore-Mega-PCs eignen würde. Meine üppig ausgestattete Entwickler-Maschine bremst Zend Studio zumindest gelegentlich ohne mit der Wimper zu zucken auf Null runter. Gerne auch mal länger.

Wie dem auch sei. Ein Leben ohne das morgentliche “DLTK indexing in progress” und “Building workspace” kann ich mir noch gar nicht vorstellen. Geschweige denn eine IDE, die nach einem Klick direkt einsatzbereit ist….- das werden hektische Zeiten.