テンプレートからウィジェットインスタンスをロードできますか?


8

私のサイトの特定の領域に「ウィジェット」を作成したいのですが、技術的でないMagentoストア管理者が特定のパラメーターを構成できます。ウィジェットは、すべての説明で、これを行うための素晴らしい方法のように聞こえます。すべてのadminhtml要素は、手間をかけずにパラメーターを入力できるように配置されています。

しかし、私が解決できないのは、テンプレートの特定のポイントで特定のウィジェットインスタンスをロードしてレンダリングする方法です(CMS>ウィジェット>新しいウィジェットインスタンスの追加で作成され、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

ウィジェット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;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.