Magento addAttributeToFilter不工作?

时间:2013-08-05 03:53:33

标签: magento

我正在homepage上显示“已选中”属性为“是”的产品。

到目前为止,我尝试过:

$_productCollection = Mage::getModel('catalog/product') -> getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('selected',array('eq'=>'Yes'))
    ->setVisibility(array(2,3,4))
    ->setOrder('created_at', 'desc')
    ->setPage(1, 48);

$_productCollection = Mage::getResourceModel('catalog/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('selected',array('eq'=>'Yes'))
    ->setVisibility(array(2,3,4))
    ->setOrder('created_at', 'desc')
    ->setPage(1, 48);

然而,正如您所看到的,“没有符合选择的产品。”但有几种产品我将'selected'属性设置为'Yes'。

我的属性的屏幕截图:http://postimg.org/gallery/53wrrrhe/

然而,当我摆脱这一行:

->addAttributeToFilter('selected',array('eq'=>'Yes'))

从他们那里,他们都工作正常,并按预期提供所有产品。

我的看法是我正在写这个addAttributeToFilter错误,但我不确定如何。任何帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:4)

Soooooo ....由于你的属性是一个下拉列表,你不能使用eq =“是”来执行addAttributeToFilter。 “selected”属性的值是存储在数据库中的选项的数值。这可能是任何数字。

你需要做的就是......

找出哪个选项是“是”选项。

$option_id = 0;
$options = Mage::getModel("eav/entity_attribute_option")
  ->getCollection()
  ->setStoreFilter()
  ->join("attribute", "attribute.attribute_id = main_table.attribute_id", "attribute_code")
  ->addFieldToFilter("attribute_code", array("eq" => "selected"));

foreach ($options as $option)
  if ($option->getValue() == "Yes")
    $option_id = $option->getOptionId();

然后,您可以使用"eq" => $option_id执行上述操作。

$_productCollection = Mage::getModel('catalog/product') -> getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('selected',array('eq'=> $option_id))
    ->setVisibility(array(2,3,4))
    ->setOrder('created_at', 'desc')
    ->setPage(1, 48);

也许有一种更清洁的方法可以做到这一点 - 但这就是我所做的。