我正在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错误,但我不确定如何。任何帮助将不胜感激!
谢谢!
答案 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);
也许有一种更清洁的方法可以做到这一点 - 但这就是我所做的。