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.

7 Gedanken zu „Statische Blöcke in Produkt- und Kategoriebeschreibungen und Bestellbedingungen verwenden“

  1. 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.

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

  2. 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;
    }

Schreibe einen Kommentar zu pwl Antworten abbrechen

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