从list.phtml结果中排除产品(magento)

时间:2012-07-23 19:55:35

标签: php magento

有没有办法从Magento的list.phtml视图中强制排除项目(通过属性值)? 我们的产品应该是可购买的,可以单独查看,但不应通过搜索或导航到他们的类别找到。

3 个答案:

答案 0 :(得分:2)

您可以扩展getProductCollection的{​​{1}}方法(如果您愿意,可以创建自定义Block类来替换某些模板)。

假设这是在一个名为Mage_Catalog_Model_Category的模块中完成的,这看起来像是:

<YourNamespace>_<YourModule>

class <YourNamespace>_<YourModule>_Model_Category extends Mage_Catalog_Model_Category { public function getProductCollection() { $collection = parent::getProductCollection() foreach($collection as $key => $item) { if (<YOUR_REMOVE_CRITERIA_HERE>) { $collection->removeItemByKey($key); } } } } 可以是从配置选项到集合中项目(产品)的属性的任何内容。

如果您希望产品不在产品列表类别中列出,则更简单的解决方案就是从类别中删除它们。

希望我能提供帮助,

LG,

FLO

答案 1 :(得分:1)

我们最终在没有创建新模块的情况下解决了这个问题。我们在/ app / code / local / mage / catalog / block / product中创建了list.php的覆盖,并包含以下代码行:

$collection->clear()
->addAttributeToFilter('my_attribute_name', array('gteq'=> 524 )) //custom attrib ID
->addAttributeToFilter('visibility', array('eq'=> 4 )) // Visibility is equal to "Catalog/Search"
->load();

就在之后:

protected function _beforeToHtml()
{
    $toolbar = $this->getToolbarBlock();

    // called prepare sortable parameters
    $collection = $this->_getProductCollection();

    // use sortable parameters
    if ($orders = $this->getAvailableOrders()) {
        $toolbar->setAvailableOrders($orders);
    }
    if ($sort = $this->getSortBy()) {
        $toolbar->setDefaultOrder($sort);
    }
    if ($dir = $this->getDefaultDirection()) {
        $toolbar->setDefaultDirection($dir);
    }
    if ($modes = $this->getModes()) {
        $toolbar->setModes($modes);
    }

之前:

// set collection to toolbar and apply sort

我们还在new.php中为新产品页面添加了相同的逻辑,以便过滤掉那些不可见的产品。

布拉德

答案 2 :(得分:0)

我知道在表示层添加业务逻辑不是一个好习惯,但无论如何快速限制app \ design \ frontend \ iln \ default \ template \ catalog \ product \ list.php

<?php $_selling_type = $_product->getResource()->getAttribute('selling_type')->getFrontend()->getValue($_product); ?>

if ($_selling_type == 'No Price') 
{
  echo ('what ever you want');
}