¿Se puede cargar una instancia de widget desde una plantilla?

8

Me gustaría crear 'widgets' en ciertas áreas de mi sitio, que pueden tener ciertos parámetros configurables por un administrador no técnico de la tienda Magento. Los widgets, según todas las descripciones, suenan como una buena manera de hacer esto. Todos los elementos adminhtml están en su lugar para permitirles completar los parámetros sin demasiados problemas.

Sin embargo, lo que no puedo resolver es cómo cargar y representar una instancia de widget específica en un punto particular de una plantilla (tal como se creó a través de CMS> Widget> Agregar nueva instancia de widget y se almacena en widget_instance). Utilicé la función de actualización de diseño para insertarlo en un bloque, que funciona razonablemente bien, pero no es lo suficientemente flexible para lo que deseo lograr.

¿Es posible en un archivo de plantilla cargar y representar una instancia de widget?

Peter O'Callaghan
fuente

Respuestas:

9

Sí, puedes hacer algo como esto:

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

Si no conoce su ID de widget, puede usar esto, y no está limitado a plantillas.

$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
fuente