![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/app/code/Soon/UrlIndexer/Model/Indexer/ |
<?php /** * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * @author Hervé Guétin <[email protected]> <@herveguetin> * @copyright Copyright (c) 2017 Agence Soon (http://www.agence-soon.fr) */ namespace Soon\UrlIndexer\Model\Indexer; class Product implements IndexerInterface { /** * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory */ private $collectionFactory; /** * @var \Magento\Catalog\Model\ResourceModel\Product\Collection */ private $collection; /** * @var \Magento\UrlRewrite\Model\UrlPersistInterface */ private $urlPersist; /** * @var \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator */ private $rewriteGenerator; /** * @var \Magento\Framework\Event\ManagerInterface */ private $eventManager; /** * @var \Magento\Store\Api\StoreRepositoryInterface */ private $storeRepository; public function __construct( \Magento\Store\Api\StoreRepositoryInterface $storeRepository, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory, \Magento\UrlRewrite\Model\UrlPersistInterface $urlPersist, \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator $rewriteGenerator, \Magento\Framework\Event\ManagerInterface $eventManager ) { $this->storeRepository = $storeRepository; $this->collectionFactory = $collectionFactory; $this->urlPersist = $urlPersist; $this->rewriteGenerator = $rewriteGenerator; $this->eventManager = $eventManager; } public function reindex() { array_map(function (\Magento\Store\Api\Data\StoreInterface $store) { if ($store->getId() != 0) { $this->reindexForStore($store); } }, $this->storeRepository->getList()); } private function reindexForStore(\Magento\Store\Api\Data\StoreInterface $store) { /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */ $this->collection = $this->collectionFactory->create(); $storeId = $store->getId(); $this->collection->setStoreId($storeId); $this->collection->addAttributeToSelect(['url_path', 'url_key']); $this->reindexCollection(); } private function reindexCollection() { array_map(function (\Magento\Catalog\Model\Product $product) { $product->setStoreId($this->collection->getStoreId()); try { $this->urlPersist->replace($this->rewriteGenerator->generate($product)); } catch (\Magento\Framework\Exception\AlreadyExistsException $e) { $message = sprintf( 'URL key for product ID %s already exist for store %s', $product->getId(), $this->collection->getStoreId() ); $this->eventManager->dispatch('soon_urlindexer_error', ['type' => 'info', 'message' => $message]); } }, $this->collection->getItems()); } }