我需要通過禁用狀態來過濾magento產品集合。 Magento在加載集合時似乎默認忽略禁用的產品。Magento加載包括禁用產品的產品集合
因此有兩個部分,我的問題:
1 - 我如何可以加載在只含禁用產品Magento的收藏? 2 - 爲什麼magento無法在集合中加載禁用的產品?
我使用標準的代碼加載集合:
$collction = Mage::getModel('catalog/product')->getCollection()
這永遠不會加載禁用的產品。
我需要通過禁用狀態來過濾magento產品集合。 Magento在加載集合時似乎默認忽略禁用的產品。Magento加載包括禁用產品的產品集合
因此有兩個部分,我的問題:
1 - 我如何可以加載在只含禁用產品Magento的收藏? 2 - 爲什麼magento無法在集合中加載禁用的產品?
我使用標準的代碼加載集合:
$collction = Mage::getModel('catalog/product')->getCollection()
這永遠不會加載禁用的產品。
如果您使用的產品扁平結構,然後
$col = Mage::getModel('catalog/product')->getCollection();
將使用平面表(如catalog_product_flat_1
),和disabled
產品是不是表的一部分。
更改配置Use Flat Catalog Product
爲「否」,你將擁有所有產品的集合:
它將這種方式加載的所有產品。
這應該加載您的收藏過濾被禁用的產品。
$products = Mage::getModel('catalog/product')->getCollection()
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToFilter('status', '0');
首先,禁用狀態是'2'。其次,殘疾人產品不在集合中,因此過濾不起作用。 – 2014-07-18 21:00:58
殘疾產品stauts是「2」而不是「0」 – Mohamed23gharbi 2015-02-26 17:40:14
如果你不想改變你的配置在後臺(保持良好的性能),我發現這個解決方案,改變只是當你的請求被處理的價值,因爲我只想要禁用產品特定功能:
Mage::app()->getStore()->setConfig('catalog/frontend/flat_catalog_product', 0);
你必須在第一時間打電話之前設置此:
Mage::getModel('catalog/product')->getCollection()
我注意到了同樣的要求時,你不能將其設置回1,親因爲集合模型商店將這個標誌保存在內存中。
這樣,我的數據庫中的配置沒有改變。
隨着平板產品的啓用,你最好使用
$collection = Mage::getResourceModel('catalog/product_collection')
您將能夠檢索殘疾人和功能的產品。
一個更好的解釋,看到這個答案: https://magento.stackexchange.com/a/40001/32179
一旦你得到你的收藏,你可以使用連接表 - > joinTable( 'cayaloginventory/stock_item', '的product_id = ENTITY_ID',陣列( 'stock_status'= >'is_in_stock'))
這將加載你需要的產品庫存,只需添加 - > addAttributeToFilter('status',array('eq'=> 1))...這個表將僅加載AVAILABLE ..如果要禁用更改狀態加載到2
讓所有產品
$collection = Mage::getModel('catalog/product')
->getCollection()
->joinTable('cataloginventory/stock_item', 'product_id=entity_id', array("stock_status" => "is_in_stock"))
->addAttributeToFilter('status', array('eq' => 2));
的殘疾人收集這引起了我一半。它停止使用扁平表,但它仍然連接到表mage_catalog_category_product_index而不是'mage_catalog_category_product',所以我仍然無法獲得禁用的產品。 – 2014-07-18 21:53:49
我通過應用' - > setStoreId(Mage_Core_Model_App :: ADMIN_STORE_ID)'得到了它。這將是你需要做的所有事情,但除非你關閉使用平面目錄產品,否則Magento會嘗試在不應該出現錯誤時使用它。所以我必須一起使用它們 – 2014-07-18 22:10:40