Skip to content

Commit 7169f04

Browse files
author
Oleksii Lisovyi
committed
Module Catalog URL Rewrite: fix issue with product URL Rewrites re-generation after changing product URL Key for product with existing url_path attribute value
1 parent ea1ace7 commit 7169f04

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,15 @@
66
namespace Magento\CatalogUrlRewrite\Observer;
77

88
use Magento\Catalog\Model\Product;
9+
use Magento\CatalogUrlRewrite\Model\ProductUrlPathGenerator;
910
use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
11+
use Magento\Framework\App\ObjectManager;
1012
use Magento\UrlRewrite\Model\UrlPersistInterface;
11-
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
1213
use Magento\Framework\Event\ObserverInterface;
1314

15+
/**
16+
* Class ProductProcessUrlRewriteSavingObserver
17+
*/
1418
class ProductProcessUrlRewriteSavingObserver implements ObserverInterface
1519
{
1620
/**
@@ -24,21 +28,32 @@ class ProductProcessUrlRewriteSavingObserver implements ObserverInterface
2428
private $urlPersist;
2529

2630
/**
27-
* @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
28-
* @param UrlPersistInterface $urlPersist
31+
* @var ProductUrlPathGenerator
32+
*/
33+
private $productUrlPathGenerator;
34+
35+
/**
36+
* @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
37+
* @param UrlPersistInterface $urlPersist
38+
* @param ProductUrlPathGenerator|null $productUrlPathGenerator
2939
*/
3040
public function __construct(
3141
ProductUrlRewriteGenerator $productUrlRewriteGenerator,
32-
UrlPersistInterface $urlPersist
42+
UrlPersistInterface $urlPersist,
43+
ProductUrlPathGenerator $productUrlPathGenerator = null
3344
) {
3445
$this->productUrlRewriteGenerator = $productUrlRewriteGenerator;
3546
$this->urlPersist = $urlPersist;
47+
$this->productUrlPathGenerator = $productUrlPathGenerator ?: ObjectManager::getInstance()
48+
->get(ProductUrlPathGenerator::class);
3649
}
3750

3851
/**
3952
* Generate urls for UrlRewrite and save it in storage
53+
*
4054
* @param \Magento\Framework\Event\Observer $observer
4155
* @return void
56+
* @throws \Magento\UrlRewrite\Model\Exception\UrlAlreadyExistsException
4257
*/
4358
public function execute(\Magento\Framework\Event\Observer $observer)
4459
{
@@ -51,6 +66,8 @@ public function execute(\Magento\Framework\Event\Observer $observer)
5166
|| $product->dataHasChangedFor('visibility')
5267
) {
5368
if ($product->isVisibleInSiteVisibility()) {
69+
$product->unsUrlPath();
70+
$product->setUrlPath($this->productUrlPathGenerator->getUrlPath($product));
5471
$this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product));
5572
}
5673
}

0 commit comments

Comments
 (0)