cancel
Showing results for 
Search instead for 
Did you mean: 

Categories' names as "None" when accessed via REST API

   Did you know you can see the translated content as per your choice?

Translation is in progress. Please check again after few minutes.

Categories' names as "None" when accessed via REST API

Hello there.

 

I am using a fresh install Magento 2.3.2 CE with sample data, and I work extensively with Magento 2 REST API to integrate it with my python3-based app. 

 

The problem is, when I make a simple GET call to http://localhost/rest/all/V1/categories

 

response code is 200, and it returns me this: 

 

{'id': 1, 'parent_id': 0, 'name': None, 'is_active': None, 'position': 0, 'level': 0, 'product_count': None, 'children_data': [{'id': 2, 'parent_id': 1, 'name': None, 'is_active': None, 'position': 1, 'level': 1, 'product_count': None, 'children_data': [{'id': 38, 'parent_id': 2, 'name': None, 'is_active': None, 'position': 1, 'level': 2, 'product_count': None, 'children_data': []},

....

and list goes on, all category names are "None".

 

I tried indexer:reindex and cache:clean. None of those helped.

 

It's important part of my app to get categories names, so I can't skip it.

 

PS. I tried to do the same with 2.3.0 fresh install, and it worked just fine.

 

Is it a 2.3.2 bug? How do I solve that?

Thanks.

 

2 REPLIES 2

Re: Categories' names as "None" when accessed via REST API

Hello @overjolted 

 

Open vendor/magento/module-catalog/Model/Category/Tree.php

 

Replace the function getTree with the below code:

public function getTree($node, $depth = null, $currentLevel = 0)
   {
       $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
       $categoryFactory = $objectManager->get('\Magento\Catalog\Model\CategoryFactory');
       $categoryId = $node->getId();
       $nodeS = $categoryFactory->create()->load($categoryId);
       /** @var \Magento\Catalog\Api\Data\CategoryTreeInterface[] $children */
       $children = $this->getChildren($node, $depth, $currentLevel);
       /** @var \Magento\Catalog\Api\Data\CategoryTreeInterface $tree */
       $tree = $this->treeFactory->create();
       $tree->setId($nodeS->getId())
           ->setParentId($nodeS->getParentId())
           ->setName($nodeS->getName())
           ->setPosition($nodeS->getPosition())
           ->setLevel($nodeS->getLevel())
           ->setIsActive($nodeS->getIsActive())
           ->setProductCount($nodeS->getProductCount())
           ->setChildrenData($children);
       return $tree;
   }

The below screenshot shows how we implemented this code to get the solution:

https://prnt.sc/p6ppvb

 

Hope it helps.

---
If you've found my answer useful, please give"Kudos" and "Accept as Solution"

Re: Categories' names as "None" when accessed via REST API

Hi @Meetanshi 
Your solution is work But It will impact to performance web site when we load subcategory.
@overjolted Can you try my solution It will work and not impact performance website:

override

Magento\Catalog\Model\Category\Tree
protected function getNode(\Magento\Catalog\Model\Category $category)
{
$nodeId = $category->getId();
$categoryTree = $this->treeResourceFactory->create();
$node = $categoryTree->loadNode($nodeId);
$node->loadChildren();
$this->prepareCollection();
$categoryTree->addCollectionData($this->categoryCollection);
return $node;
}

 

Hope it helps.
Bun!