0

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

4

3 回答 3

2

您可以扩展该getProductCollection方法Mage_Catalog_Model_Category(然后创建自定义 Block 类来替换某些模板,如果您愿意)。

假设这是在一个名为 的模块中完成的<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);
            }
        }
    }
}

<YOUR_REMOVE_CRITERIA_HERE>可以是任何东西,从配置选项到集合中项目(产品)的属性。

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

希望能帮上忙

lg,

弗洛

于 2012-07-23T21:17:30.347 回答
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 中为新产品页面添加了相同的逻辑,以便过滤掉不应该显示的产品。

布拉德

于 2013-01-10T19:59:10.347 回答
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');
}
于 2012-07-24T13:10:49.637 回答