通过 Magento2.3 中的“catalog_product_save_after”事件更新观察者中的 IsInStock 属性
Posted
技术标签:
【中文标题】通过 Magento2.3 中的“catalog_product_save_after”事件更新观察者中的 IsInStock 属性【英文标题】:Update IsInStock attribute in observer by 'catalog_product_save_after' event in Magento2.3 【发布时间】:2022-01-20 09:53:20 【问题描述】:我已在 Magento 2.3.4 中尝试过此代码
-
在 Dapl\Shortdurability\etc\adminhtml 中创建了 events.xml
2.在 Dapl\Shortdurability\Observer 中创建 Productsaveafter.php。
<?php
namespace Dapl\Shortdurability\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Catalog\Model\ResourceModel\Product\Action;
use Magento\CatalogInventory\Model\Stock\StockItemRepository;
class Productsaveafter implements ObserverInterface
private $action;
private $stockItemRepository;
public function __construct(
StockItemRepository $stockItemRepository,
Action $action
)
$this->action = $action;
$this->stockItemRepository = $stockItemRepository;
public function execute(\Magento\Framework\Event\Observer $observer)
$_product = $observer->getProduct();
$_id = $_product->getId(); // for Id
$_shortdurability = $_product->getShortdurability();
$_visibility = $_product->getVisibility();
$_qty = $this->stockItemRepository->get($_id);
$quantity = $_qty->getQty();
if(($_shortdurability == 1) && ($quantity == 0))
$this->action->updateAttributes([$_id], ['visibility' => 1], 0);
else
$this->action->updateAttributes([$_id], ['visibility' => 4], 0);
//$this->action->updateAttributes([$_id], ['quantity_and_stock_status' => ['is_in_stock' => 1]], 1);
嗨。我不能使用 save 方法来设置 IsInStock 属性值。因为,它会无限循环。最后我已经尝试了每一种方法。但是库存状况没有改变。 我也试过 updateStockItemBySku($sku, $stockItem), updateAttributes([$_id], ['quantity_and_stock_status' => ['is_in_stock' => 1]], 1)。 请帮我。我已经从谷歌搜索了它,但我仍然无法在 Magento 2.3.4 中更新产品的 IsInStock 属性。
【问题讨论】:
【参考方案1】:这是因为您使用的是 catalog_product_save_after。因此,在产品保存时,您将再次保存,并且再次发生此称为瓶颈的事件。我建议使用不同的事件。或者使用 catalog_product_save_before 事件并设置$_product->setSku("testNew1")
;并且不保存 $product 对象。
【讨论】:
是的。这是对的。我已经尝试过了。但我想更新库存状态(IsInStock)属性。请帮我解决这个问题。【参考方案2】:$product = $observer->getProduct();
$product->setStockData(['qty' => $yourQty, 'is_in_stock' => 1]);
$product->setQuantityAndStockStatus(['qty' => $yourQty, 'is_in_stock' => 1]);
【讨论】:
以上是关于通过 Magento2.3 中的“catalog_product_save_after”事件更新观察者中的 IsInStock 属性的主要内容,如果未能解决你的问题,请参考以下文章
Magento 2.3.2 PayPal Payflow 付款失败