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/53wrrhe/

ただし、この行を削除すると:

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

それらから、それらは両方とも正常に機能しており、すべての製品を期待どおりに提供しています。

私の見解では、この addAttributeToFilter を間違って書いていますが、その方法がわかりません。どんな助けでも大歓迎です!

ありがとう!

4

1 に答える 1

4

あなたの属性はドロップダウンなので、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 に答える