我正在为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();
}
}
答案 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链接以了解更多详细信息。