/** * 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) { foreach ($observer->getEvent()->getProducts() as $productId) { $product = $this->productRepository->getById($productId, false, $this->request->getParam('store_id', Store::DEFAULT_STORE_ID)); $this->urlPersist->deleteByData([UrlRewrite::ENTITY_ID => $product->getId(), UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE]); $this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product)); } }
/** * On delete handler to remove related url rewrites * * @param \Magento\Cms\Model\ResourceModel\Page $subject * @param \Closure $proceed * @param \Magento\Framework\Model\AbstractModel $page * @return \Magento\Cms\Model\ResourceModel\Page * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundDelete(\Magento\Cms\Model\ResourceModel\Page $subject, \Closure $proceed, \Magento\Framework\Model\AbstractModel $page) { $result = $proceed($page); if ($page->isDeleted()) { $this->urlPersist->deleteByData([UrlRewrite::ENTITY_ID => $page->getId(), UrlRewrite::ENTITY_TYPE => CmsPageUrlRewriteGenerator::ENTITY_TYPE]); } return $result; }
/** * Remove product urls from storage * * @param \Magento\Framework\Event\Observer $observer * @return void */ public function execute(\Magento\Framework\Event\Observer $observer) { /** @var \Magento\Catalog\Model\Product $product */ $product = $observer->getEvent()->getProduct(); if ($product->getId()) { $this->urlPersist->deleteByData([UrlRewrite::ENTITY_ID => $product->getId(), UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE]); } }
/** * Generate urls for UrlRewrite and save it in storage * * @param \Magento\Framework\Event\Observer $observer * @return void */ public function execute(EventObserver $observer) { /** @var $cmsPage \Magento\Cms\Model\Page */ $cmsPage = $observer->getEvent()->getObject(); if ($cmsPage->dataHasChangedFor('identifier') || $cmsPage->dataHasChangedFor('store_id')) { $urls = $this->cmsPageUrlRewriteGenerator->generate($cmsPage); $this->urlPersist->deleteByData([UrlRewrite::ENTITY_ID => $cmsPage->getId(), UrlRewrite::ENTITY_TYPE => CmsPageUrlRewriteGenerator::ENTITY_TYPE]); $this->urlPersist->replace($urls); } }
/** * 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 Product $product */ $product = $observer->getEvent()->getProduct(); if ($product->dataHasChangedFor('url_key') || $product->getIsChangedCategories() || $product->getIsChangedWebsites() || $product->dataHasChangedFor('visibility')) { $this->urlPersist->deleteByData([UrlRewrite::ENTITY_ID => $product->getId(), UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE, UrlRewrite::REDIRECT_TYPE => 0, UrlRewrite::STORE_ID => $product->getStoreId()]); if ($product->isVisibleInSiteVisibility()) { $this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product)); } } }
/** * 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 \Magento\Catalog\Model\Product $product */ $product = $observer->getEvent()->getProduct(); $isChangedWebsites = $product->getIsChangedWebsites(); if ($product->dataHasChangedFor('url_key') || $product->getIsChangedCategories() || $isChangedWebsites) { if ($isChangedWebsites) { $this->urlPersist->deleteByData([UrlRewrite::ENTITY_ID => $product->getId(), UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE]); } $this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product)); } }
/** * @param \Magento\Store\Model\ResourceModel\Group $object * @param callable $proceed * @param AbstractModel $group * @return \Magento\Store\Model\ResourceModel\Group * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundSave(\Magento\Store\Model\ResourceModel\Group $object, \Closure $proceed, AbstractModel $group) { $originGroup = $group; $result = $proceed($originGroup); if (!$group->isObjectNew() && ($group->dataHasChangedFor('website_id') || $group->dataHasChangedFor('root_category_id'))) { $this->storeManager->reinitStores(); foreach ($group->getStoreIds() as $storeId) { $this->urlPersist->deleteByData([UrlRewrite::STORE_ID => $storeId]); } $this->urlPersist->replace($this->generateCategoryUrls($group->getRootCategoryId(), $group->getStoreIds())); $this->urlPersist->replace($this->generateProductUrls($group->getWebsiteId(), $group->getOrigData('website_id'))); } return $result; }
/** * @param ImportProduct $import * @return void */ protected function clearProductUrls(ImportProduct $import) { $oldSku = $import->getOldSku(); while ($bunch = $import->getNextBunch()) { $idToDelete = []; foreach ($bunch as $rowNum => $rowData) { if ($import->validateRow($rowData, $rowNum) && ImportProduct::SCOPE_DEFAULT == $import->getRowScope($rowData)) { $idToDelete[] = $oldSku[$rowData[ImportProduct::COL_SKU]]['entity_id']; } } foreach ($idToDelete as $productId) { $this->urlPersist->deleteByData([UrlRewrite::ENTITY_ID => $productId, UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE]); } } }
/** * Clear product urls. * * @param \Magento\Framework\Event\Observer $observer * @return void */ public function execute(\Magento\Framework\Event\Observer $observer) { if ($products = $observer->getEvent()->getBunch()) { $oldSku = $observer->getEvent()->getAdapter()->getOldSku(); $idToDelete = []; foreach ($products as $product) { if (!isset($oldSku[$product[ImportProduct::COL_SKU]])) { continue; } $productData = $oldSku[$product[ImportProduct::COL_SKU]]; $idToDelete[] = $productData['entity_id']; } if (!empty($idToDelete)) { $this->urlPersist->deleteByData([UrlRewrite::ENTITY_ID => $idToDelete, UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE]); } } }
/** * @param Category $category * @return void */ public function deleteCategoryRewritesForChildren(Category $category) { $categoryIds = $this->childrenCategoriesProvider->getChildrenIds($category, true); $categoryIds[] = $category->getId(); foreach ($categoryIds as $categoryId) { $this->urlPersist->deleteByData([UrlRewrite::ENTITY_ID => $categoryId, UrlRewrite::ENTITY_TYPE => CategoryUrlRewriteGenerator::ENTITY_TYPE]); $this->urlPersist->deleteByData([UrlRewrite::METADATA => serialize(['category_id' => $categoryId]), UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE]); } }
/** * Remove url rewrites by categoryId * * @param int $categoryId * @return void */ protected function deleteRewritesForCategory($categoryId) { $this->urlPersist->deleteByData([UrlRewrite::ENTITY_ID => $categoryId, UrlRewrite::ENTITY_TYPE => CategoryUrlRewriteGenerator::ENTITY_TYPE]); $this->urlPersist->deleteByData([UrlRewrite::METADATA => serialize(['category_id' => $categoryId]), UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE]); }
/** * @param \Magento\Store\Model\ResourceModel\Store $object * @param callable $proceed * @param AbstractModel $store * @return mixed * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundDelete(\Magento\Store\Model\ResourceModel\Store $object, \Closure $proceed, AbstractModel $store) { $result = $proceed($store); $this->urlPersist->deleteByData([UrlRewrite::STORE_ID => $store->getId()]); return $result; }