首先,我在Magento中是全新的,所以我對它的結構和功能知之甚少。Magento的addAttributeToFilter不起作用
我正在構建過濾和顯示產品的自定義模塊。 到目前爲止,我做得很好,但現在我正在努力過濾和顯示產品嘿嘿。
我在app/code/local/Mage/Catalog/Block/Product/Filter.php
源創建的目錄塊:
<?php
class Mage_Catalog_Block_Product_Filter extends Mage_Catalog_Block_Product_List
{
protected function _beforeToHtml()
{
$table = Mage::getConfig()->getTablePrefix() . 'custom_table';
//GET
$param1 = $this->getRequest()->getParam('param1');
$param2 = $this->getRequest()->getParam('param1');
$param3 = $this->getRequest()->getParam('param3');
$param4 = $this->getRequest()->getParam('param4');
$sql = "SELECT sku FROM " . $table . " WHERE param1 = '".$param1."' AND param2 = '".$param2."' AND param3 = '".$param3."' AND param4 = '".$param4."'";
$query = Mage::getSingleton('core/resource')
->getConnection('core_read')
->fetchAll($sql);
$res = $query[0];//only one result expected
$collection = Mage::getResourceModel('catalog/product_collection');
$collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
$collection = $this->_addProductAttributesAndPrices($collection)
->addStoreFilter()
->addAttributeToFilter('sku', array('in' => $res['sku']))
->setPageSize($this->getProductsCount())
->setCurPage(1)
;
$this->setProductCollection($collection);
return parent::_beforeToHtml();
}
}
?>
而我的模塊使用一個.phtml。 來源:
<?php
echo $this->getLayout()->createBlock('catalog/product_filter')->setTemplate('catalog/product/list.phtml')->toHtml();
的問題是: 它suposed只加載從數據庫中檢索到的SKU的產品。但是,相反,它總是加載相同的產品,無論我放入addAttributeToFilter。
出於測試目的,我刪除了Filter.php中的所有內容(類聲明除外)並且行爲相同。我也在addAttributeToFilter中對sku進行了硬編碼,沒有運氣。 我檢查了查詢和結果,它是正確的。
其他方法我試過:
$_testproductCollection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('sku', array('in' => array($res['sku'])));
$this->setProductCollection($_testproductCollection);
/-------------------------/
$collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('sku', array('in' => $idsProdutos));
$this->setProductCollection($collection);
/-------------------------/
$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToFilter('sku', 'asd');//show only skus starting with...
$products->addAttributeToFilter('status', 1);//enabled
$products->addAttributeToFilter('visibility', 4);//catalog, search
$products->addAttributeToSelect('*');
$products->load();
$this->setProductCollection($products);
任何幫助是非常讚賞。
編輯
找到了解決辦法!
在腳本(在return
之前)結束,我已經包括這一行:
$this->_productCollection = $collection;
,由於某種原因,現在它正在工作。謝謝您的幫助!
'addAttributeToFilter '僅與EAV屬性一起使用。 SKU作爲產品表中的普通列存儲。你可以嘗試使用'addFieldToFilter'。雖然,如果您只查找一種產品,您應該遵循dagfr的答案。 –
嘗試使用addFieldToFilter,但它仍然無法正常工作。出於某種原因,收藏品沒有正確設置(?)。 正如我對dagfr所說,我最多可以返回3個sku,所以我需要這個集合。 –