17 use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory;
20 use Magento\UrlRewrite\Model\MergeDataProviderFactory;
58 private $urlRewritePrototype;
63 private $urlRewriteFinder;
68 private $mergeDataProviderPrototype;
73 private $categoryRepository;
88 MergeDataProviderFactory $mergeDataProviderFactory =
null,
96 if (!isset($mergeDataProviderFactory)) {
100 $this->mergeDataProviderPrototype = $mergeDataProviderFactory->create();
114 $mergeDataProvider = clone $this->mergeDataProviderPrototype;
115 $currentUrlRewrites = $this->urlRewriteFinder->findAllByData(
122 foreach ($currentUrlRewrites as $currentUrlRewrite) {
127 $mergeDataProvider->merge(
128 $currentUrlRewrite->getIsAutogenerated()
134 return $mergeDataProvider->getData();
152 $anchorCategoryIds = [];
153 $mergeDataProvider = clone $this->mergeDataProviderPrototype;
155 $currentUrlRewrites = $this->urlRewriteFinder->findAllByData(
163 $anchorCategoryIds = array_merge($productCategory->getAnchorsAbove(), $anchorCategoryIds);
166 foreach ($currentUrlRewrites as $currentUrlRewrite) {
167 $metadata = $currentUrlRewrite->getMetadata();
168 if (isset($metadata[
'category_id']) && $metadata[
'category_id'] > 0) {
170 if (in_array(
$category->getId(), $anchorCategoryIds)) {
171 $mergeDataProvider->merge(
172 $currentUrlRewrite->getIsAutogenerated()
180 return $mergeDataProvider->getData();
192 if (
$product->getData(
'save_rewrites_history')) {
194 if (
$url->getRequestPath() !== $targetPath) {
195 $generatedUrl = clone $this->urlRewritePrototype;
197 ->setEntityId(
$product->getEntityId())
198 ->setRequestPath(
$url->getRequestPath())
199 ->setTargetPath($targetPath)
202 ->setDescription(
$url->getDescription())
203 ->setIsAutogenerated(0)
204 ->setMetadata(
$url->getMetadata());
205 return [$generatedUrl];
220 $targetPath =
$url->getRedirectType()
222 :
$url->getTargetPath();
223 if (
$url->getRequestPath() !== $targetPath) {
224 $generatedUrl = clone $this->urlRewritePrototype;
226 ->setEntityId(
$product->getEntityId())
227 ->setRequestPath(
$url->getRequestPath())
228 ->setTargetPath($targetPath)
229 ->setRedirectType(
$url->getRedirectType())
231 ->setDescription(
$url->getDescription())
232 ->setIsAutogenerated(0)
233 ->setMetadata(
$url->getMetadata());
234 return [$generatedUrl];
246 $metadata =
$url->getMetadata();
247 if (isset($metadata[
'category_id'])) {
generateForAutogenerated($url, $storeId, $category, $product=null)
generateForCustom($url, $storeId, $category, $product=null)
retrieveCategoryFromMetadata($url, ObjectRegistry $productCategories=null)
__construct(UrlFinderInterface $urlFinder, ProductUrlPathGenerator $productUrlPathGenerator, UrlRewriteFactory $urlRewriteFactory, UrlRewriteFinder $urlRewriteFinder=null, MergeDataProviderFactory $mergeDataProviderFactory=null, CategoryRepository $categoryRepository=null)
generateAnchor( $storeId, Product $product, ObjectRegistry $productCategories, $rootCategoryId=null)
generate($storeId, Product $product, ObjectRegistry $productCategories, $rootCategoryId=null)