【问题标题】:Magento2 Custom Widget Not AppearingMagento2 自定义小部件未出现
【发布时间】:2017-11-16 20:52:01
【问题描述】:

我创建了一个带有自定义小部件的模块。当登录管理员,转到content->widgets,创建一个实例,并将该实例设置为显示在主页上时,小部件会按预期显示。

我已删除此实例,现在正尝试通过转到content->pages、编辑homepage -> content 部分并选择insert widget 来创建小部件。我创建了一个新的小部件实例,并在homepage -> content 部分添加了一些额外的text

当我加载主页时,小部件没有出现,尽管 text 的其余部分确实出现了。

正在调用小部件的块(我使用var_dumpexit 对此进行了测试)。

但是模板没有被渲染。

这是我的块:

<?php

namespace MyNamespace\Slider\Block\Widget;

use Magento\Framework\View\Element\Template;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Catalog\Block\Product\Context;

class Slider extends Template
{
    protected $_template = "Yamazaki_Slider::widget/slider.phtml";

    /**
     * @var CollectionFactory
     */
    protected $_productCollectionFactory;

    /**
     * @var CollectionFactory
     */
    protected $_imageHelper;

    /**
     * @param Context $context
     * @param CollectionFactory $productCollectionFactory
     */
    public function __construct(Context $context, CollectionFactory $productCollectionFactory)
    {
        $this->_imageHelper = $context->getImageHelper();
        $this->_productCollectionFactory = $productCollectionFactory;
        parent::__construct($context);
    }

    /**
     * Retrieve featured products collection
     */
    public function getProducts()
    {
        $collection = $this->_productCollectionFactory->create();
        return $collection->addAttributeToSelect('*')->addAttributeToFilter('is_featured','1');
    }
}

和我的模板:

<?php $imageBlock = $block->getLayout()->createBlock('Magento\Catalog\Block\Product\ListProduct'); ?>

<?php foreach($this->getProducts() as $product): ?>
    <?php $productImage = $imageBlock->getImage($product, 'product_page_image_large'); ?>
    <?php echo $productImage->toHtml(); ?>
<?php endforeach ?>

我的模块中的其他文件是:

等/widget.xml:

<?xml version="1.0" encoding="UTF-8"?>
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
<widget id="yamazaki_slider" class="MyNamespace\Slider\Block\Widget\Slider">
    <label translate="true">My Image Slider</label>
    <description>My Image Slider</description>
</widget>
</widgets>

module.xml 和registration.php。

我没有etc/layout.xml 文件,因为我注意到一些小部件/模块包含。我需要这个文件还是其他文件?

另外,如果我在content-&gt;pages-&gt;edit-&gt;content 中“隐藏编辑器”,我会看到:

<p>{{widget type="MyNamespace\Slider\Block\Widget\Slider"}}</p>` 

如果我用

替换它
{{block class="MyNamespace\Slider\Block\Widget\Slider" template="widget/slider.phtml"}}

内容按预期显示

【问题讨论】:

    标签: php xml widget magento2


    【解决方案1】:

    我设法让块渲染

    我必须将implements \Magento\Widget\Block\BlockInterface 添加到MyNamespace\Slider\Block\Widget\Slider

    我不确定为什么在添加 implements 之前使用第一种方法而不是第二种方法呈现。

    Magento 严重缺乏文档!

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2013-04-06
      相关资源
      最近更新 更多