2011-11-24 177 views
1

我想获得至少有一个类别的产品集合。其实我想忽略那些不属于任何类别的产品。谁能帮助吗? 我的代码如下:Magento:获得至少有一个类别的产品集合

protected function _prepareCollection() 
{ 
    $store = $this->_getStore(); 
    $collection = Mage::getModel('catalog/product')->getCollection() 
     ->addAttributeToSelect('sku') 
     ->addAttributeToSelect('name') 
     ->addAttributeToSelect('attribute_set_id') 
     ->addAttributeToSelect('type_id') 
     ->joinField('qty', 
      'cataloginventory/stock_item', 
      'qty', 
      'product_id=entity_id', 
      '{{table}}.stock_id=1', 
      'left'); 

    if ($store->getId()) { 
     //$collection->setStoreId($store->getId()); 
     $adminStore = Mage_Core_Model_App::ADMIN_STORE_ID; 
     $collection->addStoreFilter($store); 
     $collection->joinAttribute('name', 'catalog_product/name', 'entity_id', null, 'inner', $adminStore); 
     $collection->joinAttribute('custom_name', 'catalog_product/name', 'entity_id', null, 'inner', $store->getId()); 
     $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner', $store->getId()); 
     $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner', $store->getId()); 
     $collection->joinAttribute('price', 'catalog_product/price', 'entity_id', null, 'left', $store->getId()); 
    } 
    else { 
     $collection->addAttributeToSelect('price'); 
     $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner'); 
     $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner'); 
    } 

    $this->setCollection($collection); 

    parent::_prepareCollection(); 
    $this->getCollection()->addWebsiteNamesToResult(); 

    return $this; 
} 

感谢,

回答

1

使用此代码片段:

<?php 
    ini_set('display_errors', 1); 
    error_reporting(E_ALL); 
    require_once("app/Mage.php"); 
    Mage::app(); 

    $collection = Mage::getModel('catalog/product')->getCollection(); 
    $collection 
     ->joinField('category_id', 
      'catalog_category_product', 
      'category_id', 
      'product_id=entity_id', 
      null, 
      'right'); 

类别ID可以像访问:

$product->getData('category_id'); 

因此将需要所有id在catalog_category_product表中的产品,换句话说,脚本将采用所有产品在类别中。

加载额外的属性集合:

$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*'); 

更新1

我试着用你的 - 它完美的作品。

试一下这个 - 感谢您的答复

$collection = $this->_prepareCollection(); 
$collection 
    ->joinField('category_id', 
     'catalog_category_product', 
     'category_id', 
     'product_id=entity_id', 
     null, 
     'right'); 
+0

杰克,捆绑。我想在产品网格上添加此过滤器。但是当我在网格集合代码上应用您的代码片段时,出现错误(重复的ID错误)。 :( – Adeel

+0

请在您的第一个消息代码片段中加载您的收藏夹,我的代码加载了所有具有任何类别的产品 –

+0

我编辑了这个问题,在这里我想添加此检查 – Adeel

相关问题