您可以从模板加载窗口小部件实例吗?


8

我想在网站的某些区域创建“小部件”,这些小部件可以由非技术性的Magento商店管理员来配置某些参数。从所有描述来看,小部件听起来都是一种不错的方法。所有adminhtml元素均已放置到位,以使它们无需过多麻烦即可填写参数。

但是我无法解决的是如何在模板的特定位置加载和渲染特定的窗口小部件实例(通过CMS>窗口小部件>添加新的窗口小部件实例创建并存储在widget_instance中)。我使用了布局更新功能将其插入到一个块中,这相当不错,但是对于我想要实现的功能来说不够灵活。

模板文件中是否可以加载和呈现窗口小部件实例?

Answers:


9

是的,您可以执行以下操作:

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

0

如果您不知道窗口小部件ID,则可以使用它,它不仅限于模板。

$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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.