Skip to content

Commit 34c7a5a

Browse files
authored
ENGCOM-3438: #5929: [Forwardport] Saving Product does not update URL rewrite. #19170
2 parents d9adc56 + c6190d5 commit 34c7a5a

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

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

Lines changed: 19 additions & 2 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
/**
@@ -23,22 +27,33 @@ class ProductProcessUrlRewriteSavingObserver implements ObserverInterface
2327
*/
2428
private $urlPersist;
2529

30+
/**
31+
* @var ProductUrlPathGenerator
32+
*/
33+
private $productUrlPathGenerator;
34+
2635
/**
2736
* @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
2837
* @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
}

dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserverTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public function testUrlKeyHasChangedInGlobalContext()
9090

9191
$product->setData('save_rewrites_history', true);
9292
$product->setUrlKey('new-url');
93+
$product->setUrlPath('new-path');
9394
$product->save();
9495

9596
$expected = [
@@ -152,6 +153,7 @@ public function testUrlKeyHasChangedInStoreviewContextWithPermanentRedirection()
152153

153154
$product->setData('save_rewrites_history', true);
154155
$product->setUrlKey('new-url');
156+
$product->setUrlPath('new-path');
155157
$product->save();
156158

157159
$expected = [
@@ -207,6 +209,7 @@ public function testUrlKeyHasChangedInStoreviewContextWithoutPermanentRedirectio
207209

208210
$product->setData('save_rewrites_history', false);
209211
$product->setUrlKey('new-url');
212+
$product->setUrlPath('new-path');
210213
$product->save();
211214

212215
$expected = [

0 commit comments

Comments
 (0)