1

我试图在我的 Magento 网站主页的侧边栏中显示价格范围。但是,默认情况下 Magento 已为价格范围设置类别过滤器,因此如果没有类别 ID,则价格范围将不起作用。有没有办法实现这个功能?

我想出了创建一个新页面来显示产品列表的想法。问题是我不知道如何在我的过滤器上设置价格范围。这是我想到的基本想法:

$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('price_to', '4000')
    ->addAttributeToFilter('price_from', '1000');

然后显示符合条件的产品,但由于显而易见的原因,我不能使用 price_to 和 price_from。有人可以指出我正确的方向吗?提前致谢。

4

1 回答 1

1

所以我做了很多研究,但没有理想的结果,所以我创建了一个类似于 list.phtml 的新 phtml 文件,我在其中使用如下过滤器调用产品集合:

//this is dirty but this is the fastest solution I came up with
$url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 

if(false != strpos($url, 'to=500')):
$_below = 500;
elseif(false != strpos($url, 'to=1000')):
$_to = 1000;
$_from = 500;
elseif(false != strpos($url, 'to=2000')):
$_to = 2000;
$_from = 1001;
elseif(false != strpos($url, 'from=2001')):
$_above = 2000;
endif;

if(false != strpos($url, 'to=500')):
$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('price', array(
        'lteq' => $_below));
elseif(false != strpos($url, 'from=2001')):
$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('price', array(
        'gteq' => $_above));
else:
$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('price', array(
        'from' => $_from,
        'to' => $_to)); 
endif;

我根据选择的范围链接设置 $_from 和 $_to 的位置。然后,我在专门为其添加的 CMS 页面中调用 custom.phtml:

{{block type="catalog/product_list" template="catalog/layer/customrange.phtml"}}

然后,在边栏上,我添加了必要的范围(硬编码),如下所示:

<ul><li><a href="<?php echo $this->getUrl('custom-page').'?from=&to=500'; ?>">below 500</a></li></ul> 

所以我现在有没有类别过滤器的价格范围。我知道这并不完美,鉴于我的侧边栏上的范围链接是硬编码的,而且我在分页和工具栏上遇到了许多问题(说实话,它根本不起作用) 但这是我能想出的最快的解决方案并且它有效。如果有人有更好的解决方案,请随时让我知道,希望这对其他人有帮助。

于 2013-08-01T09:03:36.697 回答