【问题标题】:how to filter all products by custom dropdown attribute value in magento?如何通过magento中的自定义下拉属性值过滤所有产品?
【发布时间】:2012-02-23 10:32:13
【问题描述】:

我创建了一个名为“by_item”的自定义下拉属性,并为其添加了一些选项,例如“Suite、Bridal、Jeans”等。

<?php   // get all products
        $collection = Mage::getModel('catalog/product')->getCollection();
        $collection->addAttributeToSelect('*');

        //filter codition
        $collection->addFieldToFilter(array(
                        array('attribute'=>'by_item','eq'=>"Suite"),
                    ));

        foreach ($collection as $product) {

        var_dump($product->getData());
    }

    ?>

它什么也没给:(

但是当我这样做时:

<?php 
    $collection = Mage::getModel('catalog/product')->getCollection();
    $collection->addAttributeToSelect('*');

    //filter codition
    //$collection->addFieldToFilter(array(
    //                array('attribute'=>'by_item','eq'=>"Suite"),
    //            ));

    foreach ($collection as $product) {
    echo $product->getName() . "<br />";


}

?>

它给了我所有产品的名称。我浏览了很多文章,但没有遇到任何问题:(

【问题讨论】:

  • 我有什么遗漏的吗?

标签: zend-framework magento magento-1.4 magento-1.5


【解决方案1】:

这不起作用,因为您使用的是 addFieldToFilter() 的 OR 版本(嵌套数组)。

您想要的是 AND 版本。试试这个:

$collection = Mage::getModel('catalog/product')->getCollection();
    ->addAttributeToSelect('*')
    ->addFieldToFilter('by_item', array('eq' => 'Suite'));

foreach ($collection as $product) {
    var_dump($product->debug());
}

编辑

忽略了 OP 正在谈论“下拉”属性(不是文本字段)。

当使用addFieldToFilter()按“下拉”属性过滤时,您必须使用选项的值/id,而不是选项的文本/标签。

例如,如果您的自定义下拉属性具有此选项

id    text
12    Suite
13    Bridal
14    Jeans

如果你想按“套件”进行过滤,你可以这样编码:

$collection = Mage::getModel('catalog/product')->getCollection();
    ->addAttributeToSelect('*')
    ->addFieldToFilter('by_item', array('eq' => '12'));

您也可以间接使用选项的文本/标签:

$collection = Mage::getModel('catalog/product')->getCollection();
    ->addAttributeToSelect('*')
    ->addFieldToFilter(
        'by_item',
        array(
            'eq' => Mage::getResourceModel('catalog/product')
                        ->getAttribute('by_item')
                        ->getSource()
                        ->getOptionId('Suite')
        )
    );

【讨论】:

  • tnx @Jurgen thelen ,但仍然没有运气:(
  • 奇怪。如果我在添加到目录的属性上使用它,它可以正常工作。您是如何添加 by_item 属性的?
  • 这些分别是我的选项:by_item, Global, Dropdown, No, No, None, All Products Type, No, Yes, Yes, Yes, Filterable (with results), Yes, No, 0,是的,是的。
  • 我只写了数值,希望你能理解
  • 这也适用于我:$collection->addAttributeToFilter('name', 'product1');
猜你喜欢
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
相关资源
最近更新 更多