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?

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();

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;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.