magento - 如何从 Magento 中的一个类别(包括其子类别)中获取所有产品?

标签 magento

我正在寻找一种方法来从一个类别(包括其子类别)中检索所有产品并返回给我一个产品集合。

我知道我可以遍历类别以获取产品的 id 并将它们加载到 View 中,但我希望获得产品集合,因为它目前在大多数类别/ View 中都已完成。

有任何想法吗?

最佳答案

我通过在产品集合模型中实现 addCategoriesFilter 解决了这个问题,这是补丁。修改后的代码要复制到local池以允许更新到较新版本。

@@ -103,6 +103,7 @@
      * Allowed filters
      *  store_id                int;
      *  category_id             int;
+     *  category_ids            array;
      *  category_is_anchor      int;
      *  visibility              array|int;
      *  website_ids             array|int;
@@ -567,6 +568,21 @@
     }

     /**
+     * Specify categories filter for product collection
+     *
+     * @param array $categories
+     * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
+     */
+    public function addCategoriesFilter(array $categories)
+    {
+        $this->_productLimitationFilters['category_ids'] = $categories;
+
+        ($this->getStoreId() == 0)? $this->_applyZeroStoreProductLimitations() : $this->_applyProductLimitations();
+
+        return $this;
+    }
+
+    /**
      * Join minimal price attribute to result
      *
      * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
@@ -1592,7 +1608,7 @@
         $this->_productLimitationJoinPrice();
         $filters = $this->_productLimitationFilters;

-        if (!isset($filters['category_id']) && !isset($filters['visibility'])) {
+        if (!isset($filters['category_id']) && !isset($filters['category_ids']) && !isset($filters['visibility'])) {
             return $this;
         }

@@ -1604,11 +1620,16 @@
             $conditions[] = $this->getConnection()
                 ->quoteInto('cat_index.visibility IN(?)', $filters['visibility']);
         }
-        $conditions[] = $this->getConnection()
-            ->quoteInto('cat_index.category_id=?', $filters['category_id']);
-        if (isset($filters['category_is_anchor'])) {
+
+        if (!isset($filters['category_ids'])) {
             $conditions[] = $this->getConnection()
-                ->quoteInto('cat_index.is_parent=?', $filters['category_is_anchor']);
+                ->quoteInto('cat_index.category_id=?', $filters['category_id']);
+            if (isset($filters['category_is_anchor'])) {
+                $conditions[] = $this->getConnection()
+                    ->quoteInto('cat_index.is_parent=?', $filters['category_is_anchor']);
+            }
+        } else {
+            $conditions[] = $this->getConnection()->quoteInto('cat_index.category_id IN(' . implode(',', $filters['category_ids']) . ')', "");
         }

         $joinCond = join(' AND ', $conditions);

用法:

$category = $layer->getCurrentCategory();
$categories = $category->getAllChildren(true);

$collection = Mage::getResourceModel('catalog/product_collection');
$collection->addCategoriesFilter($categories);

关于magento - 如何从 Magento 中的一个类别(包括其子类别)中获取所有产品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6453493/

相关文章:

magento - Magento 中的条件布局 block 取决于是否登录?

session - Magento多个网站共享购物车

php - Azure 上适用于 Magento 的 MySQL 应用程序内

magento - 如何在 Magento 中编辑产品页面模板

magento - 在 Magento 电子商务上更改产品图片大小

mysql - 如何使用 join in magento 获取集合

Magento 2 观察者事件未触发

magento - CentOs Magento 文件创建为目录?

foreach php 中的 Javascript - Magento

Magento:为所有 child 阻止unsetChild吗?