Я создал модуль, в котором перезаписываю основные функции виджета со списком товаров.Я могу добиться этого, используя предпочтения, но я хочу понять метод плагина. Ниже приведен мой код для frontend / di.xml
<?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\CatalogWidget\Block\Product\ProductsList">
<plugin name="widget_product_listing_add_attribute" type="Test\CatalogWidget\Plugin\Block\Product\ProductsListAddAttributePlugin" sortOrder="1"/>
</type>
</config>
, а ниже - мой код для блока плагинов.
namespace Test\CatalogWidget\Plugin\Block\Product;
class ProductsListAddAttributePlugin
{
public function beforeCreateCollection(\Magento\CatalogWidget\Block\Product\ProductsList $subject, \Magento\Catalog\Model\ResourceModel\Product\Collection $result)
{
/**
* @var \Magento\CatalogWidget\Block\Product\ProductsList $subject
* @var \Magento\Catalog\Model\ResourceModel\Product\Collection $result
*/
die('ProductsListAddAttributePlugin before....');
}
}
после установки модуля и запуска di: compile .. при перезагрузке страницы появляется ошибка ниже.
Неустранимая ошибка: Uncaught ArgumentCountError: Слишком мало аргументов для функции Test \ CatalogWidget \ Plugin \ Block\ Product \ ProductsListAddAttributePlugin :: beforeCreateCollection (), 1 передано в C: \ xampp \ htdocs \ projects \ hello \ vendor \ magento \ framework \ Interception \ Interceptor.php в строке 121 и точно 2 ожидается в C: \ xampp \ htdocs \projects \ hello \ app \ code \ Test \ CatalogWidget \ Plugin \ Block \ Product \ ProductsListAddAttributePlugin.php: 6 Трассировка стека: # 0 C: \ xampp \ htdocs \ projects \ hello \ vendor \ magento \ framework \ Interception \ Interceptor.php(121): Test \ CatalogWidget \ Plugin \ Block \ Product \ ProductsListAddAttributePlugin-> beforeCreateCollection (Объект (Magento \ CatalogWidget \ Block \ Product \ ProductsList \ Interceptor))
1 C: \ xampp \ htdocs \ projects \ hello \ vendor \ magento \ framework \ Interception \ Interceptor.php (153):
Magento \ CatalogWidget \ Block \ Product \ ProductsList \Interceptor-> Magento \ Framework \ Interception {closure} ()
2 C: \ xampp \ htdocs \ projects \ hello \ generate \ code \ Magento \ CatalogWidget \ Block \ Product \ ProductsList \ Interceptor.php (26):
Mag in C: \ xampp \ htdocs \ projects \ hello \ app \ code \ Test \ CatalogWidget \ Plugin \ Block \ Product \ ProductsListAddAttributePlugin.php в строке 6