Você pode carregar uma instância de widget de um modelo?

8

Gostaria de criar 'widgets' em certas áreas do meu site, que podem ter determinados parâmetros configuráveis ​​por um administrador não técnico da loja Magento. Widgets, de todas as descrições, parecem uma boa maneira de fazer isso. Todos os elementos adminhtml estão no local para permitir que eles preencham os parâmetros sem muito aborrecimento.

O que não consigo resolver é como carregar e renderizar uma instância de widget específica em um ponto específico de um modelo (criado em CMS> Widget> Adicionar nova instância de widget e armazenado em widget_instance). Usei o recurso de atualização de layout para inseri-lo em um bloco, o que funciona razoavelmente bem, mas não é suficientemente flexível para o que desejo alcançar.

É possível em um arquivo de modelo carregar e renderizar uma instância de widget?

Peter O'Callaghan
fonte

Respostas:

9

Sim, você pode fazer algo assim:

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

Se você não souber o ID do seu widget, poderá usá-lo e não se limitar a modelos.

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