/**
  * 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));
     }
 }
 /**
  * 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));
     }
 }
Ejemplo n.º 4
0
 /**
  * Generate url rewrites for products assigned to website
  *
  * @param int $websiteId
  * @param int $originWebsiteId
  * @param int $storeId
  * @return array
  */
 protected function generateProductUrls($websiteId, $originWebsiteId, $storeId)
 {
     $urls = [];
     $websiteIds = $websiteId != $originWebsiteId && $originWebsiteId !== null ? [$websiteId, $originWebsiteId] : [$websiteId];
     $collection = $this->productFactory->create()->getCollection()->addCategoryIds()->addAttributeToSelect(['name', 'url_path', 'url_key'])->addWebsiteFilter($websiteIds);
     foreach ($collection as $product) {
         $product->setStoreId($storeId);
         /** @var \Magento\Catalog\Model\Product $product */
         $urls = array_merge($urls, $this->productUrlRewriteGenerator->generate($product));
     }
     return $urls;
 }
 /**
  * Set up
  */
 protected function setUp()
 {
     $this->urlPersist = $this->getMock(\Magento\UrlRewrite\Model\UrlPersistInterface::class, [], [], '', false);
     $this->product = $this->getMock(\Magento\Catalog\Model\Product::class, ['getId', 'dataHasChangedFor', 'isVisibleInSiteVisibility', 'getIsChangedWebsites', 'getIsChangedCategories', 'getStoreId'], [], '', false);
     $this->product->expects($this->any())->method('getId')->will($this->returnValue(3));
     $this->event = $this->getMock(\Magento\Framework\Event::class, ['getProduct'], [], '', false);
     $this->event->expects($this->any())->method('getProduct')->willReturn($this->product);
     $this->observer = $this->getMock(\Magento\Framework\Event\Observer::class, ['getEvent'], [], '', false);
     $this->observer->expects($this->any())->method('getEvent')->willReturn($this->event);
     $this->productUrlRewriteGenerator = $this->getMock(\Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator::class, ['generate'], [], '', false);
     $this->productUrlRewriteGenerator->expects($this->any())->method('generate')->will($this->returnValue([3 => 'rewrite']));
     $this->objectManager = new ObjectManager($this);
     $this->model = $this->objectManager->getObject(\Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver::class, ['productUrlRewriteGenerator' => $this->productUrlRewriteGenerator, 'urlPersist' => $this->urlPersist]);
 }
Ejemplo n.º 6
0
 /**
  * Action after data import.
  * Save new url rewrites and remove old if exist.
  *
  * @param Observer $observer
  *
  * @return void
  */
 public function afterImportData(Observer $observer)
 {
     $import = $observer->getEvent()->getAdapter();
     if ($products = $observer->getEvent()->getBunch()) {
         $productUrls = [];
         foreach ($products as $product) {
             $productObject = $import->_populateToUrlGeneration($product);
             $productUrls = array_merge($productUrls, $this->productUrlRewriteGenerator->generate($productObject));
         }
         if ($productUrls) {
             $this->urlPersist->replace($productUrls);
         }
     }
 }
Ejemplo n.º 7
0
 /**
  * @param ImportProduct $import
  * @param bool $result
  * @return bool
  */
 public function afterImportData(ImportProduct $import, $result)
 {
     if ($import->getAffectedEntityIds()) {
         foreach ($import->getAffectedEntityIds() as $productId) {
             $product = $this->productRepository->getById($productId);
             $productUrls = $this->productUrlRewriteGenerator->generate($product);
             if ($productUrls) {
                 $this->urlPersist->replace($productUrls);
             }
         }
     } elseif (ImportExport::BEHAVIOR_DELETE == $import->getBehavior()) {
         $this->clearProductUrls($import);
     }
     return $result;
 }
 /**
  * @param Category $category
  * @param int $storeId
  * @param bool $saveRewriteHistory
  * @return UrlRewrite[]
  */
 public function getCategoryProductsUrlRewrites(Category $category, $storeId, $saveRewriteHistory)
 {
     /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
     $productCollection = $category->getProductCollection()->addAttributeToSelect('name')->addAttributeToSelect('url_key')->addAttributeToSelect('url_path');
     $productUrls = [];
     foreach ($productCollection as $product) {
         if (in_array($product->getId(), $this->isSkippedProduct)) {
             continue;
         }
         $this->isSkippedProduct[] = $product->getId();
         $product->setStoreId($storeId);
         $product->setData('save_rewrites_history', $saveRewriteHistory);
         $productUrls = array_merge($productUrls, $this->productUrlRewriteGenerator->generate($product));
     }
     return $productUrls;
 }
 /**
  * Test method
  */
 public function testSkipGenerationForGlobalScope()
 {
     $this->product->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->productUrlRewriteGenerator->generate($this->product));
 }
Ejemplo n.º 10
0
 /**
  * Test for afterImportData()
  */
 public function testAfterImportData()
 {
     $this->productUrlRewriteGenerator->expects($this->any())->method('generate')->willReturn(['url1', 'url2']);
     $this->import->afterImportData($this->observer);
 }