/** * Generate urls for UrlRewrite and save it in storage * * @param \Magento\Framework\Event\Observer $observer * @return void */ public function execute(\Magento\Framework\Event\Observer $observer) { /** @var Category $category */ $category = $observer->getEvent()->getCategory(); if ($category->getParentId() == Category::TREE_ROOT_ID) { return; } if ($category->dataHasChangedFor('url_key') || $category->getIsChangedProductList()) { $urlRewrites = array_merge($this->categoryUrlRewriteGenerator->generate($category), $this->urlRewriteHandler->generateProductUrlRewrites($category)); $this->urlPersist->replace($urlRewrites); } }
/** * @param \Magento\Framework\Event\Observer $observer * @return void */ public function execute(\Magento\Framework\Event\Observer $observer) { /** @var Category $category */ $category = $observer->getEvent()->getCategory(); if ($category->dataHasChangedFor('parent_id')) { $saveRewritesHistory = $this->scopeConfig->isSetFlag(UrlKeyRenderer::XML_PATH_SEO_SAVE_HISTORY, ScopeInterface::SCOPE_STORE, $category->getStoreId()); $category->setData('save_rewrites_history', $saveRewritesHistory); $urlRewrites = array_merge($this->categoryUrlRewriteGenerator->generate($category), $this->urlRewriteHandler->generateProductUrlRewrites($category)); $this->urlRewriteHandler->deleteCategoryRewritesForChildren($category); $this->urlPersist->replace($urlRewrites); } }
/** * @param int $rootCategoryId * @param int $storeId * @return array */ protected function generateCategoryUrls($rootCategoryId, $storeId) { $urls = []; $categories = $this->categoryFactory->create()->getCategories($rootCategoryId, 1, false, true); foreach ($categories as $category) { /** @var \Magento\Catalog\Model\Category $category */ $category->setStoreId($storeId); $urls = array_merge($urls, $this->categoryUrlRewriteGenerator->generate($category)); } return $urls; }
public function testSkipGenerationForGlobalScope() { $this->category->expects($this->any())->method('getStoreIds')->will($this->returnValue([1, 2])); $this->storeViewService->expects($this->exactly(2))->method('doesEntityHaveOverriddenUrlKeyForStore')->will($this->returnValue(true)); $this->assertEquals([], $this->categoryUrlRewriteGenerator->generate($this->category)); }