Я пытался найти чистое решение, чтобы показывать только продукты, которые имеют фильтруемый атрибут IN STOCK, т.е. многослойный навигационный фильтр Large, будут отображаться только футболки с большими размерами на складе.
Я бы хотел отфильтровать это перед загрузкой productCollection, чтобы обеспечить быструю загрузку страницы (ish) - моя последняя задача - попытаться установить статус элемента на отключенный, когда его запас достигнет 0, чтобы основная фильтрация magento появится на странице результатов многоуровневой навигации.
Ни один из методов, которые я пробовал, не установил статус отключен - я должен иметь возможность добавить что-то в CatalogInventory / Model / Stock / Status.php updateStatus (), верно? или где-то .. что-то вроде:
/**
* Update product status from stock item
*
* @param int $productId
* @param string $productType
* @param int $websiteId
* @return Mage_CatalogInventory_Model_Stock_Status
*/
public function updateStatus($productId, $productType = null, $websiteId = null)
{
if (is_null($productType)) {
$productType = $this->getProductType($productId);
}
$storeId = Mage::app()->getStore()->getStoreId();
$item = $this->getStockItemModel()->loadByProduct($productId);
$status = self::STATUS_IN_STOCK;
$qty = 0;
if ($item->getId()) {
$status = $item->getIsInStock();
$qty = $item->getQty();
}
if($qty < 1)
Mage::getModel('catalog/product_status')->updateProductStatus($product->getId(), $storeId, Mage_Catalog_Model_Product_Status::STATUS_DISABLED);
else
Mage::getModel('catalog/product_status')->updateProductStatus($product->getId(), $storeId, Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
$this->_processChildren($productId, $productType, $qty, $status, $item->getStockId(), $websiteId);
$this->_processParents($productId, $item->getStockId(), $websiteId);
return $this;
}
Я занимался этим несколько дней, и мне не повезло. Если есть более элегантное решение, я широко открыт
спасибо