How can I display the group names above the attributes. I found the solution for Magento 1 but not for Magento 2.
Group 1 att 1 att 2 att 3
Group 2 att 4 . , I am using Porto theme on magento 2.1.
asked Aug 31, 2018 at 10:44
Arnaldo Serrano
311 silver badge4 bronze badges
-
you mean you need attribute set name?Akash– Akash2018年08月31日 10:48:16 +00:00Commented Aug 31, 2018 at 10:48
-
No I need a name of the group of attributes. e.g. Dimensions: , features ,...Arnaldo Serrano– Arnaldo Serrano2018年08月31日 12:15:16 +00:00Commented Aug 31, 2018 at 12:15
1 Answer 1
Try below code for this:
Create a block file and add this 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;
}
And after this 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);
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;
?>
answered Aug 31, 2018 at 11:50
Evince Development
8777 silver badges20 bronze badges
-
1Thanks, could you please lead me what type of file block should I create and in which folder? Which .phtm should be edited? I am still new in this and I would appreciate your help. ThanksArnaldo Serrano– Arnaldo Serrano2018年08月31日 12:18:45 +00:00Commented Aug 31, 2018 at 12:18
-
Crate one custom module. Create block and phtml files in this. After this call your custom module block where you have to display this attributes.Evince Development– Evince Development2018年08月31日 12:27:22 +00:00Commented Aug 31, 2018 at 12:27
-
check this link to create custom module inchoo.net/magento-2/how-to-create-a-basic-module-in-magento-2Evince Development– Evince Development2018年08月31日 12:29:58 +00:00Commented Aug 31, 2018 at 12:29
default