Können Sie eine Widget-Instanz aus einer Vorlage laden?

8

Ich möchte in bestimmten Bereichen meiner Website Widgets erstellen, für die bestimmte Parameter von einem nicht technischen Magento Store-Administrator konfiguriert werden können. Widgets klingen nach allen Beschreibungen nach einer guten Möglichkeit, dies zu tun. Alle adminhtml-Elemente sind vorhanden, damit sie die Parameter ohne großen Aufwand ausfüllen können.

Was ich jedoch nicht herausfinden kann, ist das Laden und Rendern einer bestimmten Widget-Instanz an einem bestimmten Punkt in einer Vorlage (wie über CMS> Widget> Neue Widget-Instanz hinzufügen erstellt und in widget_instance gespeichert). Ich habe die Layout-Aktualisierungsfunktion verwendet, um sie in einen Block einzufügen, was recht gut funktioniert, aber nicht flexibel genug für das, was ich erreichen möchte.

Ist es in einer Vorlagendatei möglich, eine Widget-Instanz zu laden und zu rendern?

Peter O'Callaghan
quelle

Antworten:

9

Ja, Sie können so etwas tun:

$widget = Mage::getModel('widget/widget_instance')->load($widgetId);
$widgetBlock = $this
                   ->getLayout()
                   ->createBlock($widget->getType(),
                                 $widget->getTitle(),
                                 $widget->getWidgetParameters());
echo $widgetBlock->toHtml();
Luke Mills
quelle
0

Wenn Sie Ihre Widget-ID nicht kennen, können Sie diese verwenden und sie ist nicht auf Vorlagen beschränkt.

$collection = Mage::getModel('widget/widget_instance')->getCollection();
        $collection->addStoreFilter(Mage::app()->getStore()->getId(), false)
            ->addFieldToFilter('title', $filter)->load();

        $widget = $collection->getFirstItem(); 

        if($widget && is_numeric($widget->getId())) {
            $widgetBlock = Mage::app()->getLayout()
                ->createBlock(
                    $widget->getType(),
                    $widget->getTitle(),
                    $widget->getWidgetParameters()
                );
            return $widgetBlock;
        }
        return false;
CarComp
quelle