Въведох приставката magento 2 за промяна на специална цена за някои продукти програмно. Това беше успех за интерфейса, но все пак в webapi получавам оригинална специална цена.
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">
<preference for="VendorModuleApiPromotionManagementInterface" type="VendorModuleModelPromotionManagement"/>
<type name="MagentoCatalogModelProduct">
<plugin name="change_product" type="VendorModulePluginProduct" sortOrder="1" disabled="false"/>
</type>
</config>
VendorModulePluginProduct.php
afterGetSpecialPrice () не се извиква, когато се използва webapi
.....
public function afterGetSpecialPrice(MagentoCatalogModelProduct $subject, $result)
{
if(isset($this->data)){
return $this->data["special_price"]; // $60.00
}
return $result; // $70.00
}
.....
резултат на първа страница: $ 60.00, резултат в webapi: $ 70.00 (оригинална специална цена)
Каква може да е причината?
Отговори:
0 за отговор № 1според кода на пробата magento2-проби необходимо е да използвате метода afterGetList в класа на плъгините.
di.xml
<type name="MagentoCatalogApiProductRepositoryInterface">
<plugin name="change_special_price" type="VendorModulePluginRepository"/>
</type>
VendorModulePluginRepository.php
<?php
namespace VendorModulePlugin;
class Repository
{
public function afterGetList(MagentoCatalogApiProductRepositoryInterface $subject,MagentoFrameworkApiSearchResults $searchResult) {
foreach ($searchResult->getItems() as $product) {
$product->setData("special_price",60.0000); //custom special price
}
return $searchResult;
}
}