ClearProductUrlsObserver.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CatalogUrlRewrite\Observer;
  7. use Magento\CatalogImportExport\Model\Import\Product as ImportProduct;
  8. use Magento\Framework\App\ResourceConnection;
  9. use Magento\UrlRewrite\Model\UrlPersistInterface;
  10. use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
  11. use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
  12. use Magento\Framework\Event\ObserverInterface;
  13. /**
  14. * Class ClearProductUrlsObserver
  15. */
  16. class ClearProductUrlsObserver implements ObserverInterface
  17. {
  18. /**
  19. * @var \Magento\UrlRewrite\Model\UrlPersistInterface
  20. */
  21. protected $urlPersist;
  22. /**
  23. * @param UrlPersistInterface $urlPersist
  24. */
  25. public function __construct(
  26. UrlPersistInterface $urlPersist
  27. ) {
  28. $this->urlPersist = $urlPersist;
  29. }
  30. /**
  31. * Clear product urls.
  32. *
  33. * @param \Magento\Framework\Event\Observer $observer
  34. * @return void
  35. */
  36. public function execute(\Magento\Framework\Event\Observer $observer)
  37. {
  38. if ($products = $observer->getEvent()->getBunch()) {
  39. $oldSku = $observer->getEvent()->getAdapter()->getOldSku();
  40. $idToDelete = [];
  41. foreach ($products as $product) {
  42. $sku = strtolower($product[ImportProduct::COL_SKU]);
  43. if (!isset($oldSku[$sku])) {
  44. continue;
  45. }
  46. $productData = $oldSku[$sku];
  47. $idToDelete[] = $productData['entity_id'];
  48. }
  49. if (!empty($idToDelete)) {
  50. $this->urlPersist->deleteByData([
  51. UrlRewrite::ENTITY_ID => $idToDelete,
  52. UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
  53. ]);
  54. }
  55. }
  56. }
  57. }