Bisakah Anda memuat instance widget dari templat?

8

Saya ingin membuat 'widget' di area tertentu di situs saya, yang dapat memiliki parameter tertentu yang dapat dikonfigurasi oleh admin toko Magento non-teknis. Widget, tentu saja, terdengar seperti cara yang bagus untuk melakukan ini. Semua elemen adminhtml tersedia untuk memungkinkan mereka mengisi parameter tanpa terlalu banyak kesulitan.

Yang tidak bisa saya lakukan adalah bagaimana memuat dan me-render instance widget tertentu pada titik tertentu dalam template (seperti yang dibuat melalui CMS> Widget> Tambahkan Instance Widget Baru dan disimpan dalam widget_instance). Saya menggunakan fitur pembaruan tata letak untuk menyisipkannya ke dalam blok, yang bekerja dengan cukup baik, tetapi tidak cukup fleksibel untuk apa yang ingin saya capai.

Apakah mungkin dalam file templat untuk memuat dan merender instance widget?

Peter O'Callaghan
sumber

Jawaban:

9

Ya, Anda dapat melakukan sesuatu seperti ini:

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

Jika Anda tidak tahu ID widget Anda, Anda bisa menggunakan ini, dan itu tidak terbatas pada templat.

$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
sumber