Skip to content

Commit f47347f

Browse files
author
Nikita Chubukov
committed
MAGETWO-91531: Some products use Categories Path for Product URLs
- Change logic for obtaining URL of product if "Use Categories Path for Product URLs" option enabled
1 parent d394949 commit f47347f

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

app/code/Magento/Catalog/Model/Product/Url.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
use Magento\UrlRewrite\Model\UrlFinderInterface;
99
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
10+
use Magento\Framework\App\Config\ScopeConfigInterface;
1011

1112
/**
1213
* Product Url model
@@ -45,28 +46,37 @@ class Url extends \Magento\Framework\DataObject
4546
*/
4647
protected $urlFinder;
4748

49+
/**
50+
* @var \Magento\Framework\App\Config\ScopeConfigInterface
51+
*/
52+
private $scopeConfig;
53+
4854
/**
4955
* @param \Magento\Framework\UrlFactory $urlFactory
5056
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
5157
* @param \Magento\Framework\Filter\FilterManager $filter
5258
* @param \Magento\Framework\Session\SidResolverInterface $sidResolver
5359
* @param UrlFinderInterface $urlFinder
5460
* @param array $data
61+
* @param ScopeConfigInterface|null $scopeConfig
5562
*/
5663
public function __construct(
5764
\Magento\Framework\UrlFactory $urlFactory,
5865
\Magento\Store\Model\StoreManagerInterface $storeManager,
5966
\Magento\Framework\Filter\FilterManager $filter,
6067
\Magento\Framework\Session\SidResolverInterface $sidResolver,
6168
UrlFinderInterface $urlFinder,
62-
array $data = []
69+
array $data = [],
70+
ScopeConfigInterface $scopeConfig = null
6371
) {
6472
parent::__construct($data);
6573
$this->urlFactory = $urlFactory;
6674
$this->storeManager = $storeManager;
6775
$this->filter = $filter;
6876
$this->sidResolver = $sidResolver;
6977
$this->urlFinder = $urlFinder;
78+
$this->scopeConfig = $scopeConfig ?:
79+
\Magento\Framework\App\ObjectManager::getInstance()->get(ScopeConfigInterface::class);
7080
}
7181

7282
/**
@@ -157,10 +167,19 @@ public function getUrl(\Magento\Catalog\Model\Product $product, $params = [])
157167
UrlRewrite::ENTITY_TYPE => \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator::ENTITY_TYPE,
158168
UrlRewrite::STORE_ID => $storeId,
159169
];
170+
$useCategories = $this->scopeConfig->getValue(
171+
\Magento\Catalog\Helper\Product::XML_PATH_PRODUCT_URL_USE_CATEGORY,
172+
\Magento\Store\Model\ScopeInterface::SCOPE_STORE
173+
);
174+
160175
if ($categoryId) {
161176
$filterData[UrlRewrite::METADATA]['category_id'] = $categoryId;
177+
} elseif (!$useCategories) {
178+
$filterData[UrlRewrite::METADATA]['category_id'] = '';
162179
}
180+
163181
$rewrite = $this->urlFinder->findOneByData($filterData);
182+
164183
if ($rewrite) {
165184
$requestPath = $rewrite->getRequestPath();
166185
$product->setRequestPath($requestPath);

app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1412,8 +1412,13 @@ protected function _addUrlRewrite()
14121412
['cu' => $this->getTable('catalog_url_rewrite_product_category')],
14131413
'u.url_rewrite_id=cu.url_rewrite_id'
14141414
)->where('cu.category_id IN (?)', $this->_urlRewriteCategory);
1415+
} else {
1416+
$select->joinLeft(
1417+
['cu' => $this->getTable('catalog_url_rewrite_product_category')],
1418+
'u.url_rewrite_id=cu.url_rewrite_id'
1419+
)->where('cu.url_rewrite_id IS NULL');
14151420
}
1416-
1421+
14171422
// more priority is data with category id
14181423
$urlRewrites = [];
14191424

0 commit comments

Comments
 (0)