public function aroundDelete(\Magento\Catalog\Model\ResourceModel\Category $categoryResource, \Closure $proceed, \Magento\Framework\Model\AbstractModel $category) { $categoryResource->addCommitCallback(function () use($category) { if (!$this->indexer->isScheduled()) { Category::$affectedProductIds = (array) $category->getAffectedProductIds(); $this->indexer->reindexRow($category->getId()); } }); return $proceed($category); }
/** * Resource model save function plugin. * Append a commit callback to save the product positions. * * @param \Magento\Catalog\Model\ResourceModel\Category $categoryResource Category original resource model. * @param \Closure $proceed Original save method. * @param \Magento\Framework\Model\AbstractModel $category Saved category. * * @return \Magento\Catalog\Model\ResourceModel\Category */ public function aroundSave(\Magento\Catalog\Model\ResourceModel\Category $categoryResource, \Closure $proceed, \Magento\Framework\Model\AbstractModel $category) { if ($category->getId() && $category->getSortedProducts()) { $this->unserializeProductPositions($category); if ($category->getIsVirtualCategory()) { $category->setPostedProducts([]); } $categoryResource->addCommitCallback(function () use($category) { $affectedProductIds = $this->getAffectedProductIds($category); $category->setAffectedProductIds($affectedProductIds); $this->saveHandler->saveProductPositions($category); }); } return $proceed($category); }
/** * @param ResourceCategory $resourceCategory * @param \Closure $proceed * @param AbstractModel $category * @return ResourceCategory * @throws \Exception */ private function addCommitCallback(ResourceCategory $resourceCategory, \Closure $proceed, AbstractModel $category) { try { $resourceCategory->beginTransaction(); $result = $proceed($category); $resourceCategory->addCommitCallback(function () use($category) { $affectedProducts = $category->getAffectedProductIds(); if (is_array($affectedProducts)) { $this->reindexList($affectedProducts); } }); $resourceCategory->commit(); } catch (\Exception $e) { $resourceCategory->rollBack(); throw $e; } return $result; }
/** * {@inheritdoc} */ public function addCommitCallback($callback) { $pluginInfo = $this->pluginList->getNext($this->subjectType, 'addCommitCallback'); if (!$pluginInfo) { return parent::addCommitCallback($callback); } else { return $this->___callPlugins('addCommitCallback', func_get_args(), $pluginInfo); } }