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


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;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.