Last active
April 12, 2017 20:20
-
-
Save ydenyshchenk/1ba19b69d25855c121331e56cebae65d to your computer and use it in GitHub Desktop.
Magento 2 URL Rewrite full reindex
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
############################################### | |
WARNING: this script truncates url rewrite tables and generates system url rewrites; | |
ALL CUSTOM URL REWRITES WILL BE DELETED | |
############################################### | |
*/ | |
const BATCH_SIZE = 5; | |
require_once './app/bootstrap.php'; | |
$_SERVER[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'default'; | |
$_SERVER[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'store'; | |
/** @var \Magento\Framework\App\Bootstrap $bootstrap */ | |
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER); | |
/** @var \Magento\Framework\ObjectManager\ObjectManager $objectManager */ | |
$objectManager = $bootstrap->getObjectManager(); | |
/** @var \Magento\Framework\App\State $appState */ | |
$appState = $objectManager->get('Magento\Framework\App\State'); | |
$appState->setAreaCode(\Magento\Framework\App\Area::AREA_ADMIN); | |
/* TRUNCATING url_rewrite TABLES */ | |
/** @var \Magento\Framework\Module\ModuleResource $moduleResource */ | |
$moduleResource = $objectManager->get('Magento\Framework\Module\ModuleResource'); | |
/** @var \Magento\Framework\DB\Adapter\Pdo\Mysql $connection */ | |
$connection = $moduleResource->getConnection(); | |
$connection->query('set foreign_key_checks = 0'); | |
$connection->truncateTable($moduleResource->getTable('catalog_url_rewrite_product_category')); | |
$connection->truncateTable($moduleResource->getTable('url_rewrite')); | |
$connection->query('set foreign_key_checks = 1'); | |
/* REINDEX URL REWRITES FOR CMS PAGES */ | |
/** @var \Magento\Cms\Model\ResourceModel\Page\Collection $cmsPageCollection */ | |
$cmsPageCollection = $objectManager->get('Magento\Cms\Model\ResourceModel\Page\Collection'); | |
/** @var |Magento\Framework\DB\Select $select */ | |
$select = $cmsPageCollection->getSelect(); | |
$select->columns($cmsPageCollection->getResource()->getIdFieldName(), 'main_table') | |
->limit(BATCH_SIZE); | |
$offset = 0; | |
while ($cmsPageIds = $connection->fetchCol($select)) { | |
/** @var \Magento\Cms\Model\Page $cmsPage */ | |
$cmsPage = $objectManager->get('Magento\Cms\Model\Page'); | |
$eventName = 'cms_page_save_after'; | |
foreach ($cmsPageIds as $cmsPageId) { | |
$cmsPageId = (int)$cmsPageId; | |
$cmsPage->load($cmsPageId); | |
$cmsPage->setOrigData('identifier', ''); | |
$data = ['object' => $cmsPage]; | |
/** @var \Magento\Framework\Event $event */ | |
$event = new \Magento\Framework\Event($data); | |
$event->setName($eventName); | |
/** @var \Magento\Framework\Event\Observer $observer */ | |
$observer = new \Magento\Framework\Event\Observer(); | |
$observer->setData(array_merge(['event' => $event], $data)); | |
/** @var \Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver $cmsPageProcess */ | |
$cmsPageProcess = $objectManager->get('Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver'); | |
$cmsPageProcess->execute($observer); | |
} | |
$offset += BATCH_SIZE; | |
$select->limit(BATCH_SIZE, $offset); | |
} | |
/* REINDEX URL REWRITES FOR CATEGORIES AND ASSIGNED PRODUCTS */ | |
/** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $categoryCollection */ | |
$categoryCollection = $objectManager->get('Magento\Catalog\Model\ResourceModel\Category\Collection'); | |
$offset = 0; | |
while ($categoryIds = $categoryCollection->getAllIds(BATCH_SIZE, $offset)) { | |
/** @var \Magento\Catalog\Model\Product $product */ | |
$category = $objectManager->get('Magento\Catalog\Model\Category'); | |
$eventName = 'catalog_category_save_after'; | |
foreach ($categoryIds as $categoryId) { | |
$categoryId = (int)$categoryId; | |
$category->load($categoryId); | |
$category->setOrigData('url_key', ''); | |
$data = ['category' => $category]; | |
/** @var \Magento\Framework\Event $event */ | |
$event = new \Magento\Framework\Event($data); | |
$event->setName($eventName); | |
/** @var \Magento\Framework\Event\Observer $observer */ | |
$observer = new \Magento\Framework\Event\Observer(); | |
$observer->setData(array_merge(['event' => $event], $data)); | |
/** @var \Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver $categoryProcess */ | |
$categoryProcess = $objectManager->get('Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver'); | |
$categoryProcess->execute($observer); | |
} | |
$offset += BATCH_SIZE; | |
} | |
/* REINDEX URL REWRITES FOR PRODUCTS NOT REINDEXED BY CATEGORY REINDEX */ | |
/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */ | |
$productCollection = $objectManager->get('Magento\Catalog\Model\ResourceModel\Product\Collection'); | |
/** @var |Magento\Framework\DB\Select $select */ | |
$select = $productCollection->getSelect() | |
->joinLeft( | |
['ur' => $productCollection->getTable('url_rewrite')], | |
'ur.entity_id = e.entity_id AND ur.entity_type="product"', | |
[] | |
)->where('ur.entity_id is null'); | |
$offset = 0; | |
while ($productIds = $productCollection->getAllIds(BATCH_SIZE, $offset)) { | |
/** @var \Magento\Catalog\Model\Product $product */ | |
$product = $objectManager->get('Magento\Catalog\Model\Product'); | |
$eventName = 'catalog_product_save_after'; | |
foreach ($productIds as $productId) { | |
$productId = (int)$productId; | |
$product->load($productId); | |
$product->setOrigData('url_key', ''); | |
$data = ['product' => $product]; | |
/** @var \Magento\Framework\Event $event */ | |
$event = new \Magento\Framework\Event($data); | |
$event->setName($eventName); | |
/** @var \Magento\Framework\Event\Observer $observer */ | |
$observer = new \Magento\Framework\Event\Observer(); | |
$observer->setData(array_merge(['event' => $event], $data)); | |
/** @var \Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver $productProcess */ | |
$productProcess = $objectManager->get('Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver'); | |
$productProcess->execute($observer); | |
} | |
$offset += BATCH_SIZE; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment