0

注目の製品のリストをロードするモジュールを書いています。すべての注目製品は、独自のカテゴリ+非表示のカテゴリ「注目」に分類されます。スクリプトは私にエラーを返します。

カテゴリビュー(list.phtml)で私はgettopproducts.phtml(これはうまく機能します)と呼びます:

<?php $currentCategory = Mage::registry('current_category'); ?>
<?php $_products = $this->getTopProducts($currentCategory); ?>
<?php echo $this->__('Available products: ').$_products->count(); ?>

から、現在のカテゴリを渡すgettopproducts.phtml関数を呼び出します。私はこれを持っています:getTopProducts()Gettopproducts.phpGettopproducts.php

public function getTopProducts($currentCategory)
{
    $_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addCategoryFilter($currentCategory)
    ->addAttributeToFilter('category_ids',array('finset'=>'87'));
    $_productCollection->load();
    return $_productCollection;
}

この行:->addAttributeToFilter('category_ids',array('finset'=>'87'));2番目のカテゴリフィルター(「注目」カテゴリのID)を追加する必要があります。しかし、これを使用すると、エラーが発生します。この行を削除すると、->addAttributeToFilter('category_ids',array('finset'=>'87'));完全に機能します。

Magento1.7.2を使用しています

4

2 に答える 2

1

その理由がわかりました。Magento 1.4+ の場合、カテゴリ ID は reports/product_collection のメンバーではありません。

これはそれを取得する方法です:->addAttributeToFilter('category_ids',array('finset'=>'87')); と置き換えます:

$_productCollection->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left');
$_productCollection->addAttributeToFilter('category_id', array('in' => array('finset' => '87'))); 

したがって、コードは次のようになります。

$_productCollection = Mage::getResourceModel('reports/product_collection');
$_productCollection->addAttributeToSelect('*');
$_productCollection->addCategoryFilter($currentCategory);
$_productCollection->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left');
$_productCollection->addAttributeToFilter('category_id', array('in' => array('finset' => '87')));        
$_productCollection->load();
return $_productCollection;
于 2013-02-14T14:47:35.230 に答える
0

Magento 1.7の場合、これは私にとってうまくいくものです:

$collection = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('id')        
    ->addAttributeToFilter('visibility', 4)
    ->addAttributeToFilter('home_slider', array('neq' => ''))
    ->addAttributeToFilter('home_slider_value', $slide_num)
    ->addStoreFilter();
    //here pass an array() of CATEGORY IDs
    $catids = array('id_1,id_2, etc..'); 

    $statements = array();
    foreach ($catids as $categoryId){
        if (is_numeric($categoryId)){
         $statements[] = "{{table}}.category_id = $categoryId";
        }
    }

    $collection->distinct(true)
    ->joinField('category_id','catalog/category_product', null,'product_id = entity_id', implode(" OR ",$statements),'inner');
于 2016-02-18T14:20:42.733 に答える