Magento 2 - 空自定义小部件渲染

时间:2016-01-27 09:43:52

标签: php magento2

我尝试在Magento 2 EE上创建自定义小部件,以列出具有自定义属性的产品' end_life'是/否类型。 它在后台很好,我创建了一个类型为" End Life Products"我把它插在我的主页上。

但是主页上的渲染是空的。只需<p></p>

请帮我渲染我的产品清单:)

应用程序/代码/我/ CustomModule的/ etc / module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="My_CustomModule" setup_version="1.0.0">
    </module>
</config>

应用程序/代码/我/ CustomModule的/ etc / widget.xml

<?xml version="1.0" encoding="UTF-8"?>
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../Magento/Widget/etc/widget.xsd">
    <widget id="my_custommodule_end_life_products" class="My\CustomModule\Block\Widget\EndLifeProducts">
        <label translate="true">End Life Products</label>
        <description></description>
    </widget>
</widgets>

应用程序/代码/我/ CustomModule /砌块/空间/ EndLifeProducts.php

namespace My\CustomModule\Block\Widget;

class EndLifeProducts extends \Magento\Framework\View\Element\Template implements \Magento\Widget\Block\BlockInterface
{

    public function getEndLifeCollection() {
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
        $productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
        $productCollection->addAttributeToFilter('end_life', true)
            ->load();
        return $productCollection;
    }

    public function _toHtml()
    {
        $this->setTemplate('widget/end_life_products.phtml');
    }
}

应用程序/代码/我/ CustomModule /视图/前端/插件/ end_life_products.phtml

<h1>End Life Products</h1>
<?php
if ($exist = ($block->getEndLifeCollection() && $block->getEndLifeCollection()->getSize())) {
    $items = $block->getEndLifeCollection()->getItems();
}

2 个答案:

答案 0 :(得分:3)

我找到了解决方案:

将模板定义为protected $_template变量,而不定义_toHtml()函数

namespace My\CustomModule\Block\Widget;

class EndLifeProducts extends \Magento\Framework\View\Element\Template implements \Magento\Widget\Block\BlockInterface
{

    protected $_template = 'widget/end_life_products.phtml';

    public function getEndLifeCollection() {
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
        $productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
        $productCollection->addAttributeToFilter('end_life', true)
            ->load();
        return $productCollection;
    }
}

将模板.phtml放入自定义模块模板文件夹中:app / code / My / CustomModule / view / frontend / template / widget / end_life_products.phtml

答案 1 :(得分:1)

将您的文件end_life_products.phtml移至app / code / My / CustomModule / view / frontend / templates /widget/end_life_products.phtml