È possibile caricare un'istanza del widget da un modello?


8

Vorrei creare "widget" in alcune aree del mio sito, che possono avere determinati parametri configurabili da un amministratore del negozio Magento non tecnico. I widget, secondo tutte le descrizioni, sembrano un bel modo di farlo. Tutti gli elementi adminhtml sono in atto per consentire loro di compilare i parametri senza troppi problemi.

Ciò che non riesco a capire, tuttavia, è come caricare e eseguire il rendering di un'istanza specifica del widget in un determinato punto di un modello (come creato tramite CMS> Widget> Aggiungi nuova istanza widget e memorizzato in widget_instance). Ho usato la funzione di aggiornamento del layout per inserirla in un blocco, che funziona abbastanza bene, ma non è abbastanza flessibile per quello che desidero ottenere.

È possibile in un file modello caricare e visualizzare un'istanza del widget?

Risposte:


9

Sì, puoi fare qualcosa del genere:

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

0

Se non conosci l'ID del tuo widget, puoi usarlo e non si limita ai modelli.

$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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.