首先,我是 Magento 的新手,所以我对它的结构和功能知之甚少。
我正在构建一个用于过滤和显示产品的自定义模块。到目前为止我做得很好,但现在我正在努力过滤和展示产品呵呵。
我在app/code/local/Mage/Catalog/Block/Product/Filter.php
Source 中创建了一个目录块:
<?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();
问题是:它应该只加载具有从数据库中检索到的 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;
出于某种原因,现在它正在工作。谢谢您的帮助!