1

我在主页顶部显示具有“已选择”属性的产品为“是” 。

到目前为止,我尝试过:

$_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);

然而,如您所见,“没有符合选择的产品。” 但是有几种产品我已将“选定”属性设置为“是”。

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

但是,当我摆脱这条线时:

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

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

我的看法是我写错了这个 addAttributeToFilter 但我不知道怎么写。任何帮助,将不胜感激!

谢谢!

4

1 回答 1

4

Sooooooo .... 由于您的属性是下拉列表,因此您不能使用 eq = “Yes” 执行 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);

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

于 2013-08-05T05:48:00.510 回答