diff --git a/Model/Indexer/Category/ProductIndexer.php b/Model/Indexer/Category/ProductIndexer.php index 696dd99..9c85fc6 100644 --- a/Model/Indexer/Category/ProductIndexer.php +++ b/Model/Indexer/Category/ProductIndexer.php @@ -11,6 +11,7 @@ use Aligent\PrerenderIo\Helper\Config; use Aligent\PrerenderIo\Model\Indexer\DataProvider\ProductCategories; use Aligent\PrerenderIo\Model\Url\GetUrlsForCategories; +use Magento\ConfigurableProduct\Model\Product\Type\Configurable; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Exception\LocalizedException; @@ -38,6 +39,8 @@ class ProductIndexer implements IndexerActionInterface, MviewActionInterface, Di private DeploymentConfig $eploymentConfig; /** @var Config */ private Config $prerenderConfigHelper; + /** @var Configurable */ + private Configurable $configurable; /** @var int|null */ private ?int $batchSize; @@ -58,6 +61,7 @@ public function __construct( PrerenderClientInterface $prerenderClient, DeploymentConfig $deploymentConfig, Config $prerenderConfigHelper, + Configurable $configurable, ?int $batchSize = 1000 ) { $this->dimensionProvider = $dimensionProvider; @@ -67,6 +71,7 @@ public function __construct( $this->deploymentConfig = $deploymentConfig; $this->batchSize = $batchSize; $this->prerenderConfigHelper = $prerenderConfigHelper; + $this->configurable = $configurable; } /** @@ -144,6 +149,11 @@ public function executeByDimensions(array $dimensions, \Traversable $entityIds): } $entityIds = iterator_to_array($entityIds); + + // Include configurable product id(s) if the edited product is simple + $parentIds = $this->configurable->getParentIdsByChild($entityIds); + $entityIds = array_unique(array_merge($entityIds, $parentIds)); + // get list of category ids for the products $categoryIds = $this->productCategoriesDataProvider->getCategoryIdsForProducts($entityIds, $storeId); diff --git a/Model/Indexer/Product/ProductIndexer.php b/Model/Indexer/Product/ProductIndexer.php index 83f3cc7..0239eb8 100644 --- a/Model/Indexer/Product/ProductIndexer.php +++ b/Model/Indexer/Product/ProductIndexer.php @@ -10,6 +10,7 @@ use Aligent\PrerenderIo\Api\PrerenderClientInterface; use Aligent\PrerenderIo\Helper\Config; use Aligent\PrerenderIo\Model\Url\GetUrlsForProducts; +use Magento\ConfigurableProduct\Model\Product\Type\Configurable; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Exception\LocalizedException; @@ -35,6 +36,8 @@ class ProductIndexer implements IndexerActionInterface, MviewActionInterface, Di private DeploymentConfig $eploymentConfig; /** @var Config */ private Config $prerenderConfigHelper; + /** @var Configurable */ + private Configurable $configurable; /** @var int|null */ private ?int $batchSize; @@ -45,6 +48,8 @@ class ProductIndexer implements IndexerActionInterface, MviewActionInterface, Di * @param PrerenderClientInterface $prerenderClient * @param DeploymentConfig $deploymentConfig * @param Config $prerenderConfigHelper + * @param Configurable $configurable + * * @param int|null $batchSize */ public function __construct( @@ -53,6 +58,7 @@ public function __construct( PrerenderClientInterface $prerenderClient, DeploymentConfig $deploymentConfig, Config $prerenderConfigHelper, + Configurable $configurable, ?int $batchSize = 1000 ) { $this->dimensionProvider = $dimensionProvider; @@ -61,6 +67,7 @@ public function __construct( $this->deploymentConfig = $deploymentConfig; $this->batchSize = $batchSize; $this->prerenderConfigHelper = $prerenderConfigHelper; + $this->configurable = $configurable; } /** @@ -138,6 +145,11 @@ public function executeByDimensions(array $dimensions, \Traversable $entityIds): } $entityIds = iterator_to_array($entityIds); + + // Include configurable product id(s) if the edited product is simple + $parentIds = $this->configurable->getParentIdsByChild($entityIds); + $entityIds = array_unique(array_merge($entityIds, $parentIds)); + // get urls for the products $urls = $this->getUrlsForProducts->execute($entityIds, $storeId);