Get product collection by root category and all its subcategories in Magento 2?How to get list of categories including sub categories in Magento 2?How get product IDs of root category and subcategory under root category programmatically?Getting product filter by root categoryProduct collection for subcategories of subcategoriesHow to do a list with all categories and subcategories, from a given main-categoryhow to get magento categories and set values of categories while adding a product programatically?How to get Subcategory and its products with details in magentoget product collection and subcategory id using category id magento 2Configurable Product Collection and variantsHow to check the category collection is empty or not in magento 2?How to show all categories and their subcategories on Layered Navigation?
Can infringement of a trademark be pursued for using a company's name in a sentence?
Is all copper pipe pretty much the same?
Making a sword in the stone, in a medieval world without magic
When were linguistics departments first established
Is it illegal in Germany to take sick leave if you caused your own illness with food?
Running a subshell from the middle of the current command
Life insurance that covers only simultaneous/dual deaths
Why does Deadpool say "You're welcome, Canada," after shooting Ryan Reynolds in the end credits?
redhat 7 + How to stop systemctl service permanent
Playing ONE triplet (not three)
What happens with multiple copies of Humility and Glorious Anthem on the battlefield?
Latest web browser compatible with Windows 98
Excess Zinc in garden soil
Word for a person who has no opinion about whether god exists
Make a transparent 448*448 image
What to do when during a meeting client people start to fight (even physically) with each others?
Touchscreen-controlled dentist office snowman collector game
Want to switch to tankless, but can I use my existing wiring?
Best mythical creature to use as livestock?
Silly Sally's Movie
Time travel short story where dinosaur doesn't taste like chicken
"One can do his homework in the library"
How to deal with a cynical class?
Why doesn't the EU now just force the UK to choose between referendum and no-deal?
Get product collection by root category and all its subcategories in Magento 2?
How to get list of categories including sub categories in Magento 2?How get product IDs of root category and subcategory under root category programmatically?Getting product filter by root categoryProduct collection for subcategories of subcategoriesHow to do a list with all categories and subcategories, from a given main-categoryhow to get magento categories and set values of categories while adding a product programatically?How to get Subcategory and its products with details in magentoget product collection and subcategory id using category id magento 2Configurable Product Collection and variantsHow to check the category collection is empty or not in magento 2?How to show all categories and their subcategories on Layered Navigation?
How can I retrieve a product collection by a root category and from all its subcategories?
Eg:
Root Category (2 products)
Subcategory 1 (2 products)
Subcategory 2 (3 products)
So I want to retrieve all 7 products in the collection.
magento2 product category collection
add a comment |
How can I retrieve a product collection by a root category and from all its subcategories?
Eg:
Root Category (2 products)
Subcategory 1 (2 products)
Subcategory 2 (3 products)
So I want to retrieve all 7 products in the collection.
magento2 product category collection
add a comment |
How can I retrieve a product collection by a root category and from all its subcategories?
Eg:
Root Category (2 products)
Subcategory 1 (2 products)
Subcategory 2 (3 products)
So I want to retrieve all 7 products in the collection.
magento2 product category collection
How can I retrieve a product collection by a root category and from all its subcategories?
Eg:
Root Category (2 products)
Subcategory 1 (2 products)
Subcategory 2 (3 products)
So I want to retrieve all 7 products in the collection.
magento2 product category collection
magento2 product category collection
edited 12 mins ago
thedash
1037
1037
asked Sep 15 '16 at 12:20
nuwausnuwaus
91931945
91931945
add a comment |
add a comment |
5 Answers
5
active
oldest
votes
You can use like this:
/** MagentoCatalogApiCategoryRepositoryInterface */
protected $categoryRepository;
/** MagentoCatalogModelResourceModelProductCollectionFactory */
protected $productCollectionFactory;
public function getAllProductOfSubcategories($categoryId, $storeId = null)
/** @var $result MagentoCatalogModelResourceModelProductCollection */
$result = $this->productCollectionFactory->create();
//get category at $storeId
try
$category = $this->categoryRepository->get($categoryId, $storeId);
catch (MagentoFrameworkExceptionNoSuchEntityException $noSuchEntityException)
return null;
return $result->addCategoryFilter($category);
*Note: Your category must Enable Anchor
*Note: run php bin/magento indexer:reindex
just for make sure
add a comment |
Code for your class file:
protected $_categoryHelper;
protected $_categoryRepository;
public function __construct(
MagentoCatalogHelperCategory $categoryHelper,
MagentoCatalogModelCategoryRepository $categoryRepository,
array $data = []
)
$this->_categoryHelper = $categoryHelper;
$this->_categoryCategoryRepository = $categoryRepository;
parent::__construct($context, $data);
public function getStoreCategories()
return $this->_categoryHelper->getStoreCategories();
public function getCategory($categoryId)
return $this->_categoryRepository->get($categoryId);
Code for your template file:
$categories = $block->getStoreCategories();
foreach ($categories as $category)
echo $category->getName();
echo ' ( ' . $category->getProductCount() . ' )';
$subCategories = $block->getCategory($category->getId());
foreach ($subCategories as $subCategory)
echo $subCategory->getName();
echo ' ( ' . $subCategory->getProductCount() . ' )';
Source: Magento 2: Get parent category, children categories & product count
add a comment |
I solved it as below,
protected $_category;
protected $_productCollection;
/** You should provide your root category here, and it will return comma seperated sub category list */
public function getChildren($categoryId = false)
if ($this->_category)
return $this->_category->getChildren();
else
return $this->getCategory($categoryId)->getChildren();
protected function _getProductCollection()
$childListStr = $this->getChildren( 2 ); // Provide the root category ID
$childList = explode( ",", $childListStr );
$catToLoad = array();
foreach( $childList as $item )
array_push( $catToLoad, $item );
if ($this->_productCollection === null)
$layer = $this->getLayer();
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection->addCategoriesFilter(['in' => $catToLoad ]);
return $this->_productCollection;
add a comment |
Hi I have another way to get product collection from root category... check it out.. I hope this help
public function __construct(
MagentoCatalogModelLayerCategory $categoryLayer
)
$this->_categoryLayer = $categoryLayer;
public function getProductCollection($category)
return $this->_categoryLayer->setCurrentCategory($category)->getProductCollection();
add a comment |
Try this
$category = Mage::getModel('catalog/category')->load(2);
$children = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
$children->addAttributeToSelect('*')
->addAttributeToFilter('parent_id', $category->getId())
->addAttributeToFilter('is_active', 1)
->addAttributeToSort('position');
foreach($children as $child)
$category=Mage::getModel('catalog/category')->load($child->entity_id);
3
This is Magento 1 way.
– Khoa TruongDinh
Sep 15 '16 at 13:29
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "479"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f136517%2fget-product-collection-by-root-category-and-all-its-subcategories-in-magento-2%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use like this:
/** MagentoCatalogApiCategoryRepositoryInterface */
protected $categoryRepository;
/** MagentoCatalogModelResourceModelProductCollectionFactory */
protected $productCollectionFactory;
public function getAllProductOfSubcategories($categoryId, $storeId = null)
/** @var $result MagentoCatalogModelResourceModelProductCollection */
$result = $this->productCollectionFactory->create();
//get category at $storeId
try
$category = $this->categoryRepository->get($categoryId, $storeId);
catch (MagentoFrameworkExceptionNoSuchEntityException $noSuchEntityException)
return null;
return $result->addCategoryFilter($category);
*Note: Your category must Enable Anchor
*Note: run php bin/magento indexer:reindex
just for make sure
add a comment |
You can use like this:
/** MagentoCatalogApiCategoryRepositoryInterface */
protected $categoryRepository;
/** MagentoCatalogModelResourceModelProductCollectionFactory */
protected $productCollectionFactory;
public function getAllProductOfSubcategories($categoryId, $storeId = null)
/** @var $result MagentoCatalogModelResourceModelProductCollection */
$result = $this->productCollectionFactory->create();
//get category at $storeId
try
$category = $this->categoryRepository->get($categoryId, $storeId);
catch (MagentoFrameworkExceptionNoSuchEntityException $noSuchEntityException)
return null;
return $result->addCategoryFilter($category);
*Note: Your category must Enable Anchor
*Note: run php bin/magento indexer:reindex
just for make sure
add a comment |
You can use like this:
/** MagentoCatalogApiCategoryRepositoryInterface */
protected $categoryRepository;
/** MagentoCatalogModelResourceModelProductCollectionFactory */
protected $productCollectionFactory;
public function getAllProductOfSubcategories($categoryId, $storeId = null)
/** @var $result MagentoCatalogModelResourceModelProductCollection */
$result = $this->productCollectionFactory->create();
//get category at $storeId
try
$category = $this->categoryRepository->get($categoryId, $storeId);
catch (MagentoFrameworkExceptionNoSuchEntityException $noSuchEntityException)
return null;
return $result->addCategoryFilter($category);
*Note: Your category must Enable Anchor
*Note: run php bin/magento indexer:reindex
just for make sure
You can use like this:
/** MagentoCatalogApiCategoryRepositoryInterface */
protected $categoryRepository;
/** MagentoCatalogModelResourceModelProductCollectionFactory */
protected $productCollectionFactory;
public function getAllProductOfSubcategories($categoryId, $storeId = null)
/** @var $result MagentoCatalogModelResourceModelProductCollection */
$result = $this->productCollectionFactory->create();
//get category at $storeId
try
$category = $this->categoryRepository->get($categoryId, $storeId);
catch (MagentoFrameworkExceptionNoSuchEntityException $noSuchEntityException)
return null;
return $result->addCategoryFilter($category);
*Note: Your category must Enable Anchor
*Note: run php bin/magento indexer:reindex
just for make sure
edited Sep 18 '17 at 2:35
answered Aug 16 '17 at 4:27
RubeliaRubelia
565
565
add a comment |
add a comment |
Code for your class file:
protected $_categoryHelper;
protected $_categoryRepository;
public function __construct(
MagentoCatalogHelperCategory $categoryHelper,
MagentoCatalogModelCategoryRepository $categoryRepository,
array $data = []
)
$this->_categoryHelper = $categoryHelper;
$this->_categoryCategoryRepository = $categoryRepository;
parent::__construct($context, $data);
public function getStoreCategories()
return $this->_categoryHelper->getStoreCategories();
public function getCategory($categoryId)
return $this->_categoryRepository->get($categoryId);
Code for your template file:
$categories = $block->getStoreCategories();
foreach ($categories as $category)
echo $category->getName();
echo ' ( ' . $category->getProductCount() . ' )';
$subCategories = $block->getCategory($category->getId());
foreach ($subCategories as $subCategory)
echo $subCategory->getName();
echo ' ( ' . $subCategory->getProductCount() . ' )';
Source: Magento 2: Get parent category, children categories & product count
add a comment |
Code for your class file:
protected $_categoryHelper;
protected $_categoryRepository;
public function __construct(
MagentoCatalogHelperCategory $categoryHelper,
MagentoCatalogModelCategoryRepository $categoryRepository,
array $data = []
)
$this->_categoryHelper = $categoryHelper;
$this->_categoryCategoryRepository = $categoryRepository;
parent::__construct($context, $data);
public function getStoreCategories()
return $this->_categoryHelper->getStoreCategories();
public function getCategory($categoryId)
return $this->_categoryRepository->get($categoryId);
Code for your template file:
$categories = $block->getStoreCategories();
foreach ($categories as $category)
echo $category->getName();
echo ' ( ' . $category->getProductCount() . ' )';
$subCategories = $block->getCategory($category->getId());
foreach ($subCategories as $subCategory)
echo $subCategory->getName();
echo ' ( ' . $subCategory->getProductCount() . ' )';
Source: Magento 2: Get parent category, children categories & product count
add a comment |
Code for your class file:
protected $_categoryHelper;
protected $_categoryRepository;
public function __construct(
MagentoCatalogHelperCategory $categoryHelper,
MagentoCatalogModelCategoryRepository $categoryRepository,
array $data = []
)
$this->_categoryHelper = $categoryHelper;
$this->_categoryCategoryRepository = $categoryRepository;
parent::__construct($context, $data);
public function getStoreCategories()
return $this->_categoryHelper->getStoreCategories();
public function getCategory($categoryId)
return $this->_categoryRepository->get($categoryId);
Code for your template file:
$categories = $block->getStoreCategories();
foreach ($categories as $category)
echo $category->getName();
echo ' ( ' . $category->getProductCount() . ' )';
$subCategories = $block->getCategory($category->getId());
foreach ($subCategories as $subCategory)
echo $subCategory->getName();
echo ' ( ' . $subCategory->getProductCount() . ' )';
Source: Magento 2: Get parent category, children categories & product count
Code for your class file:
protected $_categoryHelper;
protected $_categoryRepository;
public function __construct(
MagentoCatalogHelperCategory $categoryHelper,
MagentoCatalogModelCategoryRepository $categoryRepository,
array $data = []
)
$this->_categoryHelper = $categoryHelper;
$this->_categoryCategoryRepository = $categoryRepository;
parent::__construct($context, $data);
public function getStoreCategories()
return $this->_categoryHelper->getStoreCategories();
public function getCategory($categoryId)
return $this->_categoryRepository->get($categoryId);
Code for your template file:
$categories = $block->getStoreCategories();
foreach ($categories as $category)
echo $category->getName();
echo ' ( ' . $category->getProductCount() . ' )';
$subCategories = $block->getCategory($category->getId());
foreach ($subCategories as $subCategory)
echo $subCategory->getName();
echo ' ( ' . $subCategory->getProductCount() . ' )';
Source: Magento 2: Get parent category, children categories & product count
edited Sep 16 '16 at 6:49
answered Sep 16 '16 at 5:43
Mukesh ChapagainMukesh Chapagain
3,82812243
3,82812243
add a comment |
add a comment |
I solved it as below,
protected $_category;
protected $_productCollection;
/** You should provide your root category here, and it will return comma seperated sub category list */
public function getChildren($categoryId = false)
if ($this->_category)
return $this->_category->getChildren();
else
return $this->getCategory($categoryId)->getChildren();
protected function _getProductCollection()
$childListStr = $this->getChildren( 2 ); // Provide the root category ID
$childList = explode( ",", $childListStr );
$catToLoad = array();
foreach( $childList as $item )
array_push( $catToLoad, $item );
if ($this->_productCollection === null)
$layer = $this->getLayer();
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection->addCategoriesFilter(['in' => $catToLoad ]);
return $this->_productCollection;
add a comment |
I solved it as below,
protected $_category;
protected $_productCollection;
/** You should provide your root category here, and it will return comma seperated sub category list */
public function getChildren($categoryId = false)
if ($this->_category)
return $this->_category->getChildren();
else
return $this->getCategory($categoryId)->getChildren();
protected function _getProductCollection()
$childListStr = $this->getChildren( 2 ); // Provide the root category ID
$childList = explode( ",", $childListStr );
$catToLoad = array();
foreach( $childList as $item )
array_push( $catToLoad, $item );
if ($this->_productCollection === null)
$layer = $this->getLayer();
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection->addCategoriesFilter(['in' => $catToLoad ]);
return $this->_productCollection;
add a comment |
I solved it as below,
protected $_category;
protected $_productCollection;
/** You should provide your root category here, and it will return comma seperated sub category list */
public function getChildren($categoryId = false)
if ($this->_category)
return $this->_category->getChildren();
else
return $this->getCategory($categoryId)->getChildren();
protected function _getProductCollection()
$childListStr = $this->getChildren( 2 ); // Provide the root category ID
$childList = explode( ",", $childListStr );
$catToLoad = array();
foreach( $childList as $item )
array_push( $catToLoad, $item );
if ($this->_productCollection === null)
$layer = $this->getLayer();
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection->addCategoriesFilter(['in' => $catToLoad ]);
return $this->_productCollection;
I solved it as below,
protected $_category;
protected $_productCollection;
/** You should provide your root category here, and it will return comma seperated sub category list */
public function getChildren($categoryId = false)
if ($this->_category)
return $this->_category->getChildren();
else
return $this->getCategory($categoryId)->getChildren();
protected function _getProductCollection()
$childListStr = $this->getChildren( 2 ); // Provide the root category ID
$childList = explode( ",", $childListStr );
$catToLoad = array();
foreach( $childList as $item )
array_push( $catToLoad, $item );
if ($this->_productCollection === null)
$layer = $this->getLayer();
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection->addCategoriesFilter(['in' => $catToLoad ]);
return $this->_productCollection;
answered Sep 16 '16 at 7:39
nuwausnuwaus
91931945
91931945
add a comment |
add a comment |
Hi I have another way to get product collection from root category... check it out.. I hope this help
public function __construct(
MagentoCatalogModelLayerCategory $categoryLayer
)
$this->_categoryLayer = $categoryLayer;
public function getProductCollection($category)
return $this->_categoryLayer->setCurrentCategory($category)->getProductCollection();
add a comment |
Hi I have another way to get product collection from root category... check it out.. I hope this help
public function __construct(
MagentoCatalogModelLayerCategory $categoryLayer
)
$this->_categoryLayer = $categoryLayer;
public function getProductCollection($category)
return $this->_categoryLayer->setCurrentCategory($category)->getProductCollection();
add a comment |
Hi I have another way to get product collection from root category... check it out.. I hope this help
public function __construct(
MagentoCatalogModelLayerCategory $categoryLayer
)
$this->_categoryLayer = $categoryLayer;
public function getProductCollection($category)
return $this->_categoryLayer->setCurrentCategory($category)->getProductCollection();
Hi I have another way to get product collection from root category... check it out.. I hope this help
public function __construct(
MagentoCatalogModelLayerCategory $categoryLayer
)
$this->_categoryLayer = $categoryLayer;
public function getProductCollection($category)
return $this->_categoryLayer->setCurrentCategory($category)->getProductCollection();
answered Nov 1 '16 at 7:57
HoangHieuHoangHieu
746514
746514
add a comment |
add a comment |
Try this
$category = Mage::getModel('catalog/category')->load(2);
$children = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
$children->addAttributeToSelect('*')
->addAttributeToFilter('parent_id', $category->getId())
->addAttributeToFilter('is_active', 1)
->addAttributeToSort('position');
foreach($children as $child)
$category=Mage::getModel('catalog/category')->load($child->entity_id);
3
This is Magento 1 way.
– Khoa TruongDinh
Sep 15 '16 at 13:29
add a comment |
Try this
$category = Mage::getModel('catalog/category')->load(2);
$children = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
$children->addAttributeToSelect('*')
->addAttributeToFilter('parent_id', $category->getId())
->addAttributeToFilter('is_active', 1)
->addAttributeToSort('position');
foreach($children as $child)
$category=Mage::getModel('catalog/category')->load($child->entity_id);
3
This is Magento 1 way.
– Khoa TruongDinh
Sep 15 '16 at 13:29
add a comment |
Try this
$category = Mage::getModel('catalog/category')->load(2);
$children = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
$children->addAttributeToSelect('*')
->addAttributeToFilter('parent_id', $category->getId())
->addAttributeToFilter('is_active', 1)
->addAttributeToSort('position');
foreach($children as $child)
$category=Mage::getModel('catalog/category')->load($child->entity_id);
Try this
$category = Mage::getModel('catalog/category')->load(2);
$children = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
$children->addAttributeToSelect('*')
->addAttributeToFilter('parent_id', $category->getId())
->addAttributeToFilter('is_active', 1)
->addAttributeToSort('position');
foreach($children as $child)
$category=Mage::getModel('catalog/category')->load($child->entity_id);
edited Sep 16 '16 at 7:25
Murtuza Zabuawala
12.6k73362
12.6k73362
answered Sep 15 '16 at 13:13
Ravi ThankiRavi Thanki
34429
34429
3
This is Magento 1 way.
– Khoa TruongDinh
Sep 15 '16 at 13:29
add a comment |
3
This is Magento 1 way.
– Khoa TruongDinh
Sep 15 '16 at 13:29
3
3
This is Magento 1 way.
– Khoa TruongDinh
Sep 15 '16 at 13:29
This is Magento 1 way.
– Khoa TruongDinh
Sep 15 '16 at 13:29
add a comment |
Thanks for contributing an answer to Magento Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f136517%2fget-product-collection-by-root-category-and-all-its-subcategories-in-magento-2%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown