I would like to display subcategories in parent category. I use Magento 2.0.4.
How can I get the title and the image of the subcategories on a categorie page?
<?php /*call you block file to get category collection */
$yourBlock = \Magento\Framework\App\ObjectManager::getInstance()->get('Namespace\Modulename\Block\CategorisCollection');
$categories = $yourBlock ->getStoreCategories(true,false,true);
$categoryHelper = $yourBlock->getCategoryHelper();
foreach($categories as $category) {
if (!$category->getIsActive()) {
continue;
}
?>
<li > <a href="<?php echo $categoryHelper->getCategoryUrl($category) ?>" ><?php echo $category->getName() ?></a>
<?php
if($childrenCategories = $yourBlock ->getChildCategories($category)){
?>
<ul >
<?php
foreach($childrenCategories as $childrenCategory){
if (!$childrenCategory->getIsActive()) {
continue;
}
?>
<li><a href="<?php echo $categoryHelper->getCategoryUrl($childrenCategory) ?>"><?php echo $childrenCategory->getName() ?></a></li>
<?php }
}
}
?>
I'd like to know also.
I currently can get subcategories, titles and urls but cannot get the image!
Does anyone know how to get the image url of the category?
<?php $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $category = $objectManager->get('Magento\Framework\Registry')->registry('current_category'); $subcats = $category->getChildrenCategories(); ?> <div class="row"> <?php foreach ($subcats as $subcat) { if ($subcat->getIsActive()) { $subcat_url = $subcat->getUrl(); $subcat_img = ""; $placeholder_img = "/media/placeholder.png"; ?> <div class="col-sm-6 sub-cat-tile"> <a href="<?php echo $subcat_url; ?>"> <img src="<?php echo $subcat->getImageUrl() ? $subcat_img : $placeholder_img; ?>"> <p><?php echo $subcat->getName(); ?></p> </a> </div> <?php } } ?> </div>
getImageUrl() only returns a boolean, and doesnt even return true if a category has an image!
Ah, this was solved easily by adding this into the loop.
$subcategory = $objectManager->create('Magento\Catalog\Model\Category')->load($subcat->getId()); $subcat_img = $subcategory->getImageUrl();
Hope this helps.
Hello,
Please can anyone tel us where to put all this code?
Desperate here
Amazing post !! that is really helpful content.
For more helpful content see more helpful conent regarding Magento 2 Get Sub-categories.
<?php $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');//get current category ?> <?php $requestInterface = $objectManager->get('Magento\Framework\App\RequestInterface'); //echo $routeName = $requestInterface->getRouteName(); //echo "<br/>"; //echo $moduleName = $requestInterface->getModuleName(); //echo "<br/>"; $controllerName = $requestInterface->getControllerName(); //echo "<br/>"; //echo $actionName = $requestInterface->getActionName(); ?> <?php $parcatId = $category->getId(); // current Category ID $parcategory = $objectManager->create('Magento\Catalog\Model\Category')->load($parcatId); $parent_category = $parcategory->getParentCategory(); $subcatId = $parent_category->getId(); $subcategory = $objectManager->create('Magento\Catalog\Model\Category')->load($subcatId); $subcats = $subcategory->getChildrenCategories(); $_helper = $this->helper('Magento\Catalog\Helper\Output'); ?> <?php if($parent_category->getLevel() == 2 || $controllerName == 'product'): ?> <ul class="sub_cat_bg navigation"> <?php foreach ($subcats as $subcat) { //$_category = $objectManager->create('Magento\Catalog\Model\Category')->load($subcat->getId()); //$_outputhelper = $this->helper('Magento\Catalog\Helper\Output'); $subcaturl = $subcat->getUrl(); ?> <li class="cat_image_bg level0"> <a class="level-top" href="<?php echo $subcaturl ?>"> <span><?php echo $subcat->getName(); ?></span> </a> </li> <?php } ?> </ul> <?php endif; ?>
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');//get current category <?php $catId = $category->getId(); // Parent Category ID $subcategory = $objectManager->create('Magento\Catalog\Model\Category')->load($catId); $subcats = $subcategory->getChildrenCategories(); $categoryHelper = $this->getCategoryHelper(); //$this->getChildCategories($subcategory) //$_helper = $this->helper('Magento\Catalog\Helper\Output'); //echo "<pre>"; //print_r($subcats->count()); //echo "<pre>"; $count = 0; ?> <div class="category_bg mobile"> <ul id="main_cat_bg" class="main_cat_bg"> <?php $cat_togg = 0; foreach ($subcats as $subcat) { if (!$subcat->getIsActive()) { continue; } $_category = $objectManager->create('Magento\Catalog\Model\Category')->load($subcat->getId()); //$_outputhelper = $this->helper('Magento\Catalog\Helper\Output'); $helper = $this->helper('SR\CategoryImage\Helper\Category'); $subcaturl = $subcat->getUrl(); $imageUrlthum = $helper->getImageUrl($_category->getData('thumbnail')); //$imageUrlthum = resize($_category->getData('thumbnail'),153,153); //$cat_desc = $_category->getCatDescription(); $_imgHtml = ''; if ($imageUrlthum) { $_imgHtml = '<img src="' . $imageUrlthum. '" />'; //$_imgHtml = $_outputhelper->categoryAttribute($_category, $_imgHtml, 'image'); /* @escapeNotVerified */ } ?> <li> <div class="sub_cat_content_main"> <div class="cat_image_text"> <a href="<?php echo $subcaturl ?>"> <?php echo $_imgHtml;?> <!--<div class="desicription_part">--> <?php //echo $cat_desc; ?> <!--</div>--> </a> <div class="sub_name_bg"> <a href="<?php echo $subcaturl ?>"> <?php echo $subcat->getName(); ?> </a> </div> <!-- Start 3rd Level Chiled Category--> <?php $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $object_managertwo = $objectManager->create('Magento\Catalog\Model\Category')->load($subcat->getId()); $subcatslevelthird = $object_managertwo->getChildrenCategories(); ?> <?php if ($subcatslevelthird->count() > 0) { ?> <ul class="sub_cat_bg"> <?php foreach ($subcatslevelthird as $subcatthird) { $_outputhelper = $this->helper('Magento\Catalog\Helper\Output'); $subcaturl = $subcatthird->getUrl(); ?> <li class="cat_image_bg"> <a class="level-top" href="<?php //echo $subcaturl ?>"> <span><?php //echo $subcatthird->getName(); ?></span> </a> <div class="child_name_bg"> <span><?php echo $subcatthird->getName(); ?></span> </div> <!-- Start 4th Level Chiled Category--> <?php $_objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $object_managerthree = $_objectManager->create('Magento\Catalog\Model\Category')->load($subcatthird->getId()); $subcatslevel = $object_managerthree->getChildrenCategories(); ?> <?php if ($subcatslevel->count() > 0){?> <ul class="chiled_cat_bg"> <?php foreach ($subcatslevel as $subcatlevel) { $_outputhelper = $this->helper('Magento\Catalog\Helper\Output'); $subcaturl = $subcatlevel->getUrl(); ?> <li class="cat_image_bg"> <a class="level-top" href="<?php echo $subcaturl ?>"> <span><?php echo $subcatlevel->getName(); ?></span> </a> </li> <?php } ?> </ul> <?php } ?> <!-- End 4th level Chiled Category--> </li> <?php } ?> </ul> <?php } ?> <!-- End 3rd level Chiled Category--> </div> </div> </li> <?php } ?> </ul> </div>
If you are looking for a much better solution to show subcategories on category view pages on Magento2 frontend, Have a look at Advanced Subcategory Grid module on Marketplace.
Try this blog for your requirements
http://magecomp.com/blog/display-subcategories-information-category-page-magento-2/ |