Einbinden von Magento Produktformularen auf belibigen Seiten

Häufig ist der Wunsch da auf bestimmten Seiten einzelne Produkte genauer darzustellen. In der Regel sind das CMS Seiten oder direkt die Startseite. Teilweise dann auch mit einem Button, um das Produkt direkt in den Warenkorb zu legen. Das aber natürlich nur für simple Produkte, da die ganzen Abhänigkeiten und Skripte, die an anderen Produkttypen hängen viel zu kompliziert sind.

Das kommt daher, dass jeder Produkttyp eigene zusätzliche Templates, Layout.xml Anweisungen und das einbinden von zusätzlichem Javascript zur folge hat.

Das Javascript Problem ist dabei noch das geringste. Hier reicht es augenscheinlich alles von den verschiedenen Produkttypen einzubinden, da die entscheidenden Aufrufe von den Templates aus geschehen. Zumindest solange es bei nur einem Produkt bleibt. Schwieriger ist es mit den Templates, da an jedem Produkttyp bis zu 10 davon hängen. Ganz zu schweigen, wenn man Module verwendet, die in irgend einer Weise die Produktseite beeinflussen. Hier kommen wir dann auch schon zu der Problematik der Layout.xml. Der saubere Weg für Module ist es, über die Layout.xml weitere Templates zu injizieren. Das scheint zunächst erst mal störend, da es die Zahl der beteiligten Templates erhöht, und man auch einiges an Wissen braucht, um die Arbeitsweise zu verstehen, in der die Layout Anweisungen abgearbeitet werden. Es wird sich jedoch für uns als Vorteil herrausstellen, da wir so in der Lage sind, die komplette Produktformular Logik in völlig Produktfremde Seiten einzubinden und gleichzeitig die Menge an doppeltem Code auf ein Minimum zu reduzieren.

Was sich schließlich doch zu einem Problem entwickelte war jedoch, dass einige der Produktblöcke $variablen auf globaler Ebene setzen/ändern. Und dass die ID des zu ladenden Produktes bereits feststehen muss, bevor das Layout.xml vollständig aufgebaut wurde. Es gab zwar einen Versuch von mir das in die beforeHtml Methode eines eigenen Blocks zu setzen, dies funktioniert aber nur für den Fall, dass der Layout.xml Cache deaktiviert ist. Benutzbar ist es trotzdem noch geworden durch ein paar Löschroutinen für entsprechende Cacheeinträge. Aber für eine optimale Performance und Architektur braucht man einen Punkt der wesentlich früher ansetzt.

PS: Ich werde den Eintrag noch irgendwann erweitern, zum Beispiel mit Codebeispielen aus meinen Versuchen dazu. Sollte die jemand vorher schon gerne haben wollen, per mail bei mir melden. :)