Türchen 23: Widgets in Magento erstellen

Tüchen 23 gibt den Blick auf Widgets frei. Genauer gesagt auf die Erstellung eines Widgets. Widgets können seid Magento 1.4 erstellt und eingebunden werden. Sie stellen zusätzliche Funktionen bereit, in der Basis-Version kann bereits auf einige zurückgegriffen werden.

Da dies jedoch nicht so spannend ist, wie ein neues zu erstellen, erstellen wir in einfachen Schritten ein einfaches Widget.

1. Extension anlegen
In local erstellen wir folgendes Verzeichnis "Webguys/Widget" und darin - wie auch bei einer Extension die Verzeichnisse "Helper" und "etc".

2. config.xml erstellen
Unter "Webguys/Widget/etc" erstellen wir die "config.xml" mit folgendem Inhalt:

<?xml version="1.0"?>
<config>
    <modules>
        <Webguys_Widget>
            <version>0.0.1</version>
        </Webguys_Widget>
    </modules>
    <global>
        <helpers>
            <widget>
                <class>Webguys_Widget_Helper</class>
            </imagewidget>
        </helpers>
        <blocks>
             <widget>
                <class>Webguys_Widget_Block</class>
             </widget>
        </blocks>
    </global>
</config>

3. widget.xml erstellen
Damit Magento das Widget auch als solches erkennt, erstellen wir die "widget.xml" im Verzeichnis "Webguys/Widget/etc/widget.xml".

<?xml version="1.0"?>
<widgets>
    <widget_text type="widget/text">
        <name>Text anzeigen</name>
        <description type="desc">Fügt einen Text hinzu.</description>
        <parameters>
            <mein_text>
                <label>Text</label>
                <visible>1</visible>
                <required>1</required>
                <type>text</type>
            </mein_text>
        </parameters>        
    </widget_text>
</widgets>

4. Helper anlegen
Damit alles funktioniert noch schnell einen - in diesem Fall - leeren Helper anlegen:

<?php
class Webguys_Widget_Helper_Data extends Mage_Core_Helper_Abstract {
}

5. Einen Block anlegen
Damit auch eine Ausgabe erfolgt, erstellen wir nun noch einen Block, nämlich "Webguys/Widget/Block/Text.php":

<?php

class Webguys_Widget_Block_Text extends Mage_Core_Block_Abstract implements Mage_Widget_Block_Interface {

    protected function _toHtml() {
        $text = $this->getData('mein_text');
        if( trim( $text ) != "" ){
            return $text;
        }
    }
}

6. Widgets über Magento anlegen
Die Darstellung von Widgets lässt sich bequem über Magento steuern, dazu wechselt man in Backend und wählt den den Punkt "CMS > Widgets". Über "Neue Widget Instanz anlegen" legen wir eine neue Instanz an und wählen über das DropDown unser neu erstelltes Widget. Dazu wählen wir die nötige "Frontend Eigenschaften" und über "Layout Updates" die gewünschten Seiten, auf denen das Widget erscheinen soll. Über den zweiten Menupunkt "Widget Optionen können wir den Text für unser Widget eingeben und am Ende speichern.

7. Cache leeren
Wie immer bei Änderungen - Cache leeren und das Resultat bewundern.



Ein Beitrag von Ingo Hillebrand
Ingo's avatar

Ingo Hillebrand lebt in Soest und arbeitet als Anwendungsentwickler bei der Firma connect-io. Dort beschäftigt sich der studierte Wirtschaftsinformatiker (Bachelor of Science) weiterhin mit Magento. Sie erreichen ihn per e-Mail an ingo@webguys.de oder über Xing.

Alle Beiträge von Ingo

Kommentare
MM am

imagewidget meinte ich

MM am

Hi!

            Webguys_Widget_Helper

stimmt wahrscheinlich nicht in der config.xml.

Viele Grüße

Nina am

Bei mir wird das Widget im Backend leider nicht angezeigt.

Mario P. am

Schöne Anleitung... Wenn ich richtig gelesen habe, fehlt noch die Datei "Webguys_Widget.xml" m Verzeichnis "app/etc/modules" mit ungefähr folgendem Inhalt:

        true
        local

... oder?

Türchen 05: Widgets in Magento « Das Entwickler-Blog für Magento, eCommerce und Shops – webguys.de am

[...] ihr Blut geleckt, dann könnt ihr Türchen 23 des letztjährigen Adventkalenders öffnen und lesen, wie man Widgets in Magento erstellt. Mit dieser Basis sind wir gewappnet, diese Jahr einen noch genaueren Blick auf Widgets zu [...]

Björn am

Sehr schöner Beitrag. Ich möchte jetzt auch mal ein Widget bauen und frage mich an dieser Stelle, wie es mit dem Caching aussieht. Kann man, ähnlich wie bei Blöcken, bspw. im construct() das Caching steuern? Bspw. das der Cache nach x Sekunden verfällt? Oder gar nicht gecacht wird?

Dein Kommentar