/** * Add only is in stock products filter to product collection * * @param \Magento\Catalog\Model\Resource\Product\Collection $collection * @return $this */ public function addIsInStockFilterToCollection($collection) { $websiteId = $this->_storeManager->getStore($collection->getStoreId())->getWebsiteId(); $joinCondition = $this->_getReadAdapter()->quoteInto('e.entity_id = stock_status_index.product_id' . ' AND stock_status_index.website_id = ?', $websiteId); $joinCondition .= $this->_getReadAdapter()->quoteInto(' AND stock_status_index.stock_id = ?', Stock::DEFAULT_STOCK_ID); $collection->getSelect()->join(array('stock_status_index' => $this->getMainTable()), $joinCondition, array())->where('stock_status_index.stock_status=?', Stock\Status::STATUS_IN_STOCK); return $this; }
/** * Add information about stock status to product collection * * @param \Magento\Catalog\Model\Resource\Product\Collection $productCollection * @param int|null $websiteId * @param int|null $stockId * @return $this */ public function addStockStatusToProducts($productCollection, $websiteId = null, $stockId = null) { if ($stockId === null) { $stockId = Stock::DEFAULT_STOCK_ID; } if ($websiteId === null) { $websiteId = $this->_storeManager->getStore()->getWebsiteId(); if ((int) $websiteId == 0 && $productCollection->getStoreId()) { $websiteId = $this->_storeManager->getStore($productCollection->getStoreId())->getWebsiteId(); } } $productIds = array(); foreach ($productCollection as $product) { $productIds[] = $product->getId(); } if (!empty($productIds)) { $stockStatuses = $this->getProductStockStatus($productIds, $websiteId, $stockId); foreach ($stockStatuses as $productId => $status) { if ($product = $productCollection->getItemById($productId)) { $product->setIsSalable($status); } } } return $this; }