如何在我的自定义小部件中呈现产品列表

时间:2019-01-14 10:11:46

标签: magento2 magento-2.3

我正在为magento 2.3创建我的自定义模块,而小部件却遇到了问题。 我已经创建了我的窗口小部件类型,当将其添加到首页时,我必须查看选择渲染的产品的产品列表。 我想使用... / magento / vendor / magento / module-catalog / view / frontend / templates / product / list.phtml作为模板

问题在于Widget类必须扩展Magento \ Framework \ View \ Element \ Template类,并且要呈现ProductList,我必须扩展Magento \ Catalog \ Block \ Product \ ListProduct。

也许有人可以给我一些解决该问题的建议。

这是我的代码的一部分

文件my-vendor / my-module / Block / Widget / MyWidget.php

class PromotedWidget extends Template implements BlockInterface
{
    public function __construct(
        Context $context,
      \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         array $data = []
    )
    {
        $this->productCollectionFactory = $productCollectionFactory;
        parent::__construct($context, $data);
    }

    public function getLoadedProductCollection()
    {
        $collection = $this->productCollectionFactory->create();
        $collection->addAttributeToSelect('*');
        $collection->addAttributeToFilter('necessary_attribute', ['necessary_attribute' => 'attr_value']);
        return $collection;
    }

    public function toHtml()
    {
        $this->setTemplate('Magento_Catalog::product/list.phtml');
        return parent::_toHtml();
    }
}

1 个答案:

答案 0 :(得分:0)

我认为扩展Magento \ Catalog \ Block \ Product \ ListProduct类不是一个好习惯。如果要加载自定义产品集合并使其与产品列表页面相同,那么建议您在自定义小部件中为Magento \ CatalogSearch \ Model \ Search \ IndexBuilder类创建一个插件,如下所示:

  

命名空间\模块名称\ etc \ di.xml

{"code":"rest_cannot_access","message":"Only authenticated users can access the REST API.","data":{"status":401}}
  

命名空间\模块名称\插件\ CatalogSearch \ Model \ Search \ IndexBuilder.php

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\CatalogSearch\Model\Search\IndexBuilder">
        <plugin name="Namespace_Modulename::custom_collection" type="Namespace\Modulename\Plugin\CatalogSearch\Model\Search\IndexBuilder" />
    </type>
</config>

此外,您可以参考this链接以了解更多详细信息。