19 use Magento\UrlRewrite\Model\MergeDataProviderFactory;
30 private $storeViewService;
35 private $storeManager;
40 private $objectRegistryFactory;
45 private $anchorUrlRewriteGenerator;
50 private $currentUrlRewritesRegenerator;
55 private $categoriesUrlRewriteGenerator;
60 private $canonicalUrlRewriteGenerator;
65 private $mergeDataProviderPrototype;
70 private $categoryRepository;
86 ObjectRegistryFactory $objectRegistryFactory,
91 MergeDataProviderFactory $mergeDataProviderFactory =
null,
94 $this->storeViewService = $storeViewService;
96 $this->objectRegistryFactory = $objectRegistryFactory;
97 $this->canonicalUrlRewriteGenerator = $canonicalUrlRewriteGenerator;
98 $this->categoriesUrlRewriteGenerator = $categoriesUrlRewriteGenerator;
99 $this->currentUrlRewritesRegenerator = $currentUrlRewritesRegenerator;
100 $this->anchorUrlRewriteGenerator = $anchorUrlRewriteGenerator;
101 if (!isset($mergeDataProviderFactory)) {
104 $this->mergeDataProviderPrototype = $mergeDataProviderFactory->create();
105 $this->categoryRepository = $categoryRepository ?:
131 $mergeDataProvider = clone $this->mergeDataProviderPrototype;
135 !$this->storeViewService->doesEntityHaveOverriddenUrlKeyForStore(
140 $mergeDataProvider->merge(
146 return $mergeDataProvider->getData();
160 $mergeDataProvider = clone $this->mergeDataProviderPrototype;
162 foreach ($productCategories as
$category) {
171 $productCategories = $this->objectRegistryFactory->create([
'entities' =>
$categories]);
173 $mergeDataProvider->merge(
176 $mergeDataProvider->merge(
177 $this->categoriesUrlRewriteGenerator->generate(
$storeId,
$product, $productCategories)
179 $mergeDataProvider->merge(
180 $this->currentUrlRewritesRegenerator->generate(
187 $mergeDataProvider->merge(
188 $this->anchorUrlRewriteGenerator->generate(
$storeId,
$product, $productCategories)
190 $mergeDataProvider->merge(
191 $this->currentUrlRewritesRegenerator->generateAnchor(
198 return $mergeDataProvider->getData();
211 if (is_array($parentIds) && count($parentIds) >= 2) {
228 $isUrlKeyOverridden = $this->storeViewService->doesEntityHaveOverriddenUrlKeyForStore(
234 if (!$isUrlKeyOverridden) {
isCategoryProperForGenerating(Category $category, $storeId)
generateForGlobalScope($productCategories, Product $product, $rootCategoryId=null)
generateForSpecificStoreView($storeId, $productCategories, Product $product, $rootCategoryId=null)
__construct(StoreViewService $storeViewService, StoreManagerInterface $storeManager, ObjectRegistryFactory $objectRegistryFactory, CanonicalUrlRewriteGenerator $canonicalUrlRewriteGenerator, CategoriesUrlRewriteGenerator $categoriesUrlRewriteGenerator, CurrentUrlRewritesRegenerator $currentUrlRewritesRegenerator, AnchorUrlRewriteGenerator $anchorUrlRewriteGenerator, MergeDataProviderFactory $mergeDataProviderFactory=null, CategoryRepositoryInterface $categoryRepository=null)