Magento 2插件在应用目录价格规则时无法正常工作



我创建了一个简单的Magento 2插件,这增加了价格的额外成本。

这是我测试的简单代码

<?php
namespace [Vendor][Name]PluginMagentoCatalogModel;
class Product
{
protected $objectManager;
public function __construct(
MagentoFrameworkObjectManagerInterface $objectManager
)
{
$this->objectManager = $objectManager;
}

public function afterGetPrice(
MagentoCatalogModelProduct $subject,
$result
) {
return $result + 100;
}
}

这段代码工作正常,但是当我创建目录价格规则时,系统就像它不使用它一样,而是从另一个模块获取价格。 有没有人已经遇到过这个问题并找到了解决方案?我想了解并解决问题。

提前谢谢。

我解决了这个问题。

在实践中,在模块目录规则/模型/索引器/产品价格计算器中:

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace MagentoCatalogRuleModelIndexer;
/**
* Product price calculation according rules settings.
*/
class ProductPriceCalculator
{
/**
* @var MagentoFrameworkPricingPriceCurrencyInterface
*/
private $priceCurrency;
/**
* @param MagentoFrameworkPricingPriceCurrencyInterface $priceCurrency
*/
public function __construct(MagentoFrameworkPricingPriceCurrencyInterface $priceCurrency)
{
$this->priceCurrency = $priceCurrency;
}
/**
* Calculates product price.
*
* @param array $ruleData
* @param null $productData
* @return float
*/
public function calculate($ruleData, $productData = null)
{
if ($productData !== null && isset($productData['rule_price'])) {
$productPrice = $productData['rule_price'];
} else {
$productPrice = $ruleData['default_price'];
}
switch ($ruleData['action_operator']) {
case 'to_fixed':
$productPrice = min($ruleData['action_amount'], $productPrice);
break;
case 'to_percent':
$productPrice = $productPrice * $ruleData['action_amount'] / 100;
break;
case 'by_fixed':
$productPrice = max(0, $productPrice - $ruleData['action_amount']);
break;
case 'by_percent':
$productPrice = $productPrice * (1 - $ruleData['action_amount'] / 100);
break;
default:
$productPrice = 0;
}
return $this->priceCurrency->round($productPrice);
}
}

计算函数 ($ruleData, $ProductData = null( 执行目录规则中设置的计算。

真正的问题在于$ruleData,因为它包含的价格信息直接取自product_catalog数据库,不包括任何旨在修改价格的插件。

我个人不知道这是否是Magento 2的错误,但是使模块目录规则工作的唯一方法是拦截该变量并修改其内容。

我希望它能帮助某人。 :)

对不起我的英语不好

最新更新