I created an attribute set and attribute groups with attributes in it. In the admin panel the attributes are listed in groups, like i created them. But on the front productpage all the attributes are listed together, without displaying the attribute group name first. I would like to display the Attribute Group Name on the product page (more information tab), before the attributes in this group. How do i do that?
Any news?
I'd really like to know the answer, please help!
I recently did the similar work so sharing here
Create a block with following code
protected $_groupCollection; public function __construct( ............... \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $_groupCollection ............. ) { $this->_groupCollection = $_groupCollection; parent::__construct($context); } public function getAttributeGroupId($attributeSetId) { $groupCollection = $this->_groupCollection->create(); $groupCollection->addFieldToFilter('attribute_set_id',$attributeSetId); $groupCollection->addFieldToFilter('attribute_group_name','Grid Attributes'); return $groupCollection->getFirstItem(); } public function getAttributeGroups($attributeSetId) { $groupCollection = $this->_groupCollection->create(); $groupCollection->addFieldToFilter('attribute_set_id',$attributeSetId); $groupCollection->setOrder('sort_order','ASC'); return $groupCollection; } public function getGroupAttributes($pro,$groupId, $productAttributes){ $data=[]; $no =__('No'); foreach ($productAttributes as $attribute){ if ($attribute->isInGroup($pro->getAttributeSetId(), $groupId) && $attribute->getIsVisibleOnFront() ){ if($attribute->getFrontend()->getValue($pro) && $attribute->getFrontend()->getValue($pro)!='' && $attribute->getFrontend()->getValue($pro)!=$no){ $data[]=$attribute; } } } return $data; }
Now call that in your phtml file
$groupid=$block->getAttributeGroupId($_product->getAttributeSetId()); $attributesgroups=$block->getAttributeGroups($_product->getAttributeSetId()); $productAttributes=$product->getAttributes(); $i=0; $countAttributes=$block->getCountAttributes($product,$attributesgroups,$productAttributes); ?> <?php foreach ($attributesgroups as $attributesgroup): $attributes=$block->getGroupAttributes($product,$attributesgroup->getAttributeGroupId(),$productAttributes); if($attributes){ ?> <h3 class="col label" scope="row"><?php echo $attributesgroup->getAttributeGroupName() ?></h3> <div class="additional-attributes-wrapper table-wrapper block"> <table class="data table additional-attributes" id="product-attribute-specs-table"> <tbody> <?php foreach ($attributes as $attribute): ?> <tr> <td class="col label" scope="row"><?php echo $attribute->getFrontendLabel() ?></td> <td class="col data feature" data-th="<?php echo $attribute->getFrontendLabel() ?>"><?php /* @escapeNotVerified */ echo $attribute->getFrontend()->getValue($product) ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php } endforeach; ?>
https://blog.qaisarsatti.com/magento_2/magento-2-get-product-attributes-attribute-groups/
@daniele_galeazzii added the solution kindly check.