Pouvez-vous charger une instance de widget à partir d'un modèle?

8

Je voudrais créer des «widgets» dans certaines zones de mon site, qui peuvent avoir certains paramètres configurables par un administrateur de magasin Magento non technique. Les widgets, selon toutes les descriptions, semblent être une bonne façon de le faire. Tous les éléments adminhtml sont en place pour leur permettre de remplir les paramètres sans trop de tracas.

Ce que je ne peux pas savoir cependant, c'est comment charger et rendre une instance de widget spécifique à un point particulier dans un modèle (comme créé via CMS> Widget> Ajouter une nouvelle instance de widget et stocké dans widget_instance). J'ai utilisé la fonction de mise à jour de la mise en page pour l'insérer dans un bloc, ce qui fonctionne assez bien, mais ce n'est pas assez flexible pour ce que je souhaite réaliser.

Est-il possible dans un fichier modèle de charger et de rendre une instance de widget?

Peter O'Callaghan
la source

Réponses:

9

Oui, vous pouvez faire quelque chose comme ça:

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

Si vous ne connaissez pas votre ID de widget, vous pouvez l'utiliser, et ce n'est pas limité aux modèles.

$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
la source