【问题标题】:Magento: Product collection filtered by two categoriesMagento:按两个类别过滤的产品集合
【发布时间】:2013-02-10 17:09:39
【问题描述】:

我正在编写一个为我加载特色产品列表的模块。所有特色产品都位于其自己的类别 + 隐藏类别“特色”中。该脚本返回一个错误。

在类别视图 (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.php 的函数getTopProducts() 传递当前类别。在Gettopproducts.php 我有这个:

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

此行:-&gt;addAttributeToFilter('category_ids',array('finset'=&gt;'87')); 应添加第二个类别过滤器(“精选”类别的 ID)。但是当我使用它时,我得到一个错误。当我删除这一行时:-&gt;addAttributeToFilter('category_ids',array('finset'=&gt;'87')); 它工作得很好。

我正在使用 Magento 1.7.2

【问题讨论】:

    标签: magento filter categories


    【解决方案1】:

    我找到了原因。对于 Magento 1.4+,类别 ID 不是报告/产品集合的成员。

    获取方法如下: 替换-&gt;addAttributeToFilter('category_ids',array('finset'=&gt;'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;
    

    【讨论】:

      【解决方案2】:

      对于 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');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-02
        • 1970-01-01
        • 2014-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多