Можете ли вы загрузить экземпляр виджета из шаблона?

8

Я хотел бы создать «виджеты» в определенных областях на моем сайте, которые могут иметь определенные параметры, настраиваемые нетехническим администратором магазина Magento. Виджеты, по всем описаниям, звучат как хороший способ сделать это. Все элементы adminhtml на месте, чтобы позволить им заполнить параметры без особых хлопот.

Однако я не могу понять, как загрузить и отобразить конкретный экземпляр виджета в определенной точке шаблона (как созданный с помощью CMS> Widget> Add New Widget Instance и сохраненный в widget_instance). Я использовал функцию обновления макета, чтобы вставить его в блок, который работает достаточно хорошо, но он недостаточно гибок для того, чего я хочу достичь.

Возможно ли в файле шаблона загрузить и отобразить экземпляр виджета?

Питер О'Каллаган
источник

Ответы:

9

Да, вы можете сделать что-то вроде этого:

$widget = Mage::getModel('widget/widget_instance')->load($widgetId);
$widgetBlock = $this
                   ->getLayout()
                   ->createBlock($widget->getType(),
                                 $widget->getTitle(),
                                 $widget->getWidgetParameters());
echo $widgetBlock->toHtml();
Люк Миллс
источник
0

Если вы не знаете свой идентификатор виджета, вы можете использовать его, и он не ограничивается шаблонами.

$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
источник