Statische Blöcke in Produkt- und Kategoriebeschreibungen und Bestellbedingungen verwenden

Statische Blöcke (static blocks) in Magento ist eine sehr praktische Funktion, mit der die Wiederverwendbarkeit von Inhalten vereinfacht wird. Wird ein Block mit dem Namen my_block definiert, kann er auf eine CMS-Seite mit dem folgenden Code eingefügt werden:

{{block type="cms/block" block_id="my_block"}}

Leider unterstützt Magento von Haus aus die statischen Blöcke nur in CMS-Seiten. In Artikelbeschreibungen und in Kategoriebeschreibungen wird der Block-Code nicht interpretiert. Auch in Bestellbedingungen werden statische Blöcke nicht unterstützt.

Dies lässt sich beheben, in dem betroffene Objekte mit einer zusätzlichen Methode erweitert werden.

Im ersten Schritt sind die folgenden Dateien in den Ordner magento/app/code/local zu kopieren.

  • magento/app/code/core/Mage/Catalog/Model/Product.php
  • magento/app/code/core/Mage/Catalog/Model/Category.php
  • magento/app/code/core/Mage/Checkout/Model/Agreement.php

Tipp: mkdir kann unter Linux mit dem Paramter -p alle Unterverzeichnisse in einem Befehl erzeugen:

mkdir -p magento/app/code/local/Mage/Catalog/Model/

Im nächsten Schritt werden folgenden Dateien bearbeitet:

  • magento/app/code/local/Mage/Catalog/Model/Product.php
  • magento/app/code/local/Mage/Catalog/Model/Category.php
  • magento/app/code/local/Mage/Checkout/Model/Agreement.php

Im zweiten Schritt ist in die Datei Agreement.php die folgende Funktion vor der letzten „}“ einzufügen:

function getContent()
 {
   $content = $this->getData('content');
   $templateFilter = Mage::getModel('cms/template_filter');
   $cms = $templateFilter->filter($content);
   return $cms;
 }

In die Dateien Product.php und Category.php wird eine ähnliche Funktion vor der letzten „}“ eingefügt, die sich im Namen und in dem Parameter der ersten Codezeile unterscheidet:

function getDescription()
 {
   $content = $this->getData('description');
   $templateFilter = Mage::getModel('cms/template_filter');
   $cms = $templateFilter->filter($content);
   return $cms;
 }

Damit statische Blöcke auch in der Kurzbeschreibung von Produkten verwendet werden können, muss in Product.php zusätzlich  die folgende Funktion eingefügt werden:

function getShortDescription()
 {
    $content = $this->getData('short_description');
    $templateFilter = Mage::getModel('cms/template_filter');
    $cms = $templateFilter->filter($content);
    return $cms;
 }

Nachtrag vom 29.06.2012: Diese Modifikation wurde getestet und funktioniert mit Magento 1.4 / 1.5.1 / 1.6.2 / 1.7.0.

Nachtrag vom 01.08.2012: Die kostenfreie Extension Static Blocks Everywhere, verwendet die Überschreibungslogik von Magento, um die betroffenen Klassen mit den Methoden sauber zu erweitern und die Nutzung statischer Blöcke überall in Magento zu ermöglichen.

Dieser Beitrag wurde unter Tutorials veröffentlicht. Setze ein Lesezeichen auf den Permalink.

7 Antworten auf Statische Blöcke in Produkt- und Kategoriebeschreibungen und Bestellbedingungen verwenden

  1. Danke für den Tipp. Mal eine Frage. Hat es einen Grund, dass du nicht die Magento Überschreibungslogik nutzt?

  2. pwl sagt:

    Der Artikel soll eine einfache und schnelle Lösung bieten. Für die, die Magento sauber erweitern/modifizieren wollen, ist die Überschreibungslogik ein guter Hinweis.

  3. In Magento 1.6.2.0 funktioniert die Beschreibung nicht. Haben Sie da auch bereits eine Lösung dazu?

    MfG Vlad Shevchenko

    • pwl sagt:

      Hallo Vlad,
      der Code sollte auch mit Magento 1.6.2 funktionieren. Bitte überprüfen Sie, ob alle Dateien in richtigen Unterverzeichnissen liegen.

  4. Christian sagt:

    Danke für den guten Tipp.

  5. werk26 sagt:

    Hi danke für die tolle Extension

    Ich habe ein Attribut (textfield) über ich welches ich dann gerne den static block aufrufen würde
    {{block type=“cms/block“ block_id=“custom_tab“}}

    Leider geht das nicht, wäre aber ein tolles Feature
    Habe Versucht in der Product.php folgendes zu ergänzen, leider ohne Auswrikung

    function getMeinAttribut()
    {
    $content = $this->getData(‚mein_attribut‘);
    $templateFilter = Mage::getModel(‚cms/template_filter‘);
    $html = $templateFilter->filter($content);
    return $html;
    }

  6. Markus sagt:

    Hallo, danke für die Info. Ich habe 1.9.2 und da gibt es die Verzeichnisse nicht mehr. Gibt es da ev ein Update?

    Vielen lieben Dank und Gruss

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *