列表页面上的Magento自定义过滤器会产生错误的产品数量

时间:2015-10-08 16:03:34

标签: php mysql magento filter product

我正在显示包含产品的列表页面。我应用自定义过滤器来过滤掉产品。

list.phtml中的代码:

$postCodeQueryStr = $this->getRequest()->getParam('post_code');

$_productCollection = $this->getLoadedProductCollection()
        ->addAttributeToFilter(
                array(
                    array('attribute'=>'town', 'like' => ''.$postCodeQueryStr.'%'),
                    array('attribute'=>'post_code', 'like' => ''.$postCodeQueryStr.'%')
                )
        )

        ->clear()->addAttributeToSort('created_at', 'DESC');

显示我使用的计数或产品:

echo $_productCollection->getSize()

这里最初通过$this->getLoadedProductCollection(),我获得所有产品,然后我使用addAttributeToFilter()过滤它。它实际上显示有限的产品。我的意思是它过滤掉以显示与标准相关的有限产品。

enter image description here

但是,不是显示过滤计数,而是显示产品的整数,按标准过滤后不会显示计数。

我在列表中获得了有限的产品,但是它们的数量是旧的(在过滤之前)。

2 个答案:

答案 0 :(得分:0)

问题是您在模板级别上进行过滤,并且计数在此之前在工具栏中呈现。 所以你必须把你的过滤器放在

function getLoadedProductCollection() 

进一步使用函数

public function getProductCollection()
{
    $collection = Mage::getResourceModel('catalog/product_collection')
        ->setStoreId($this->getStoreId())
        ->addCategoryFilter($this);
    return $collection;
}

位于 应用程序/代码/核心/法师/目录/型号/ Category.php

您可以在此处添加过滤器。

我建议您不要编辑此核心文件并将其切换到本地文件夹。

如果有任何疑问,请告诉我。

感谢希望它能完成你的工作。

答案 1 :(得分:0)

您可以根据需要修改下面的功能只需更换下面的功能,您就完成了。感谢

    public function getProductCollection()
    {
        $postCodeQueryStr = $_POST['post_code'];
        $collection = Mage::getResourceModel('catalog/product_collection')
            ->setStoreId($this->getStoreId())
            ->addCategoryFilter($this);
        if($postCodeQueryStr!=''){
$collection->addAttributeToFilter(
                array(
                    array('attribute'=>'town', 'like' => ''.$postCodeQueryStr.'%'),
                    array('attribute'=>'post_code', 'like' => ''.$postCodeQueryStr.'%')
                )
        )
        ->clear()->addAttributeToSort('created_at', 'DESC');
            }
        return $collection;
    }