cancel
Showing results for 
Search instead for 
Did you mean: 

How to instantiate an object in a template .phtml

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

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

How to instantiate an object in a template .phtml

Im currently invoking the method getAttributeGroupId using the objectmanager, however the object manager should not be used to instantiate as mentioned in the Magento 2 documentation. What is the best practice way to instantiate? Please help ive been stuck on this for dayz.

 

$_objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$config= $_objectManager->get('Magento\Catalog\Model\Config');
$attributeGroupId = $config->getAttributeGroupId($_product->getAttributeSetId(), '');

 

3 REPLIES 3

Re: How to instantiate an object in a template .phtml

Use following code

$groupCollection = $_objectManager->create('Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\Collection');
$groupCollection->addFieldToFilter('attribute_set_id',
$_product->getAttributeSetId());
$groupCollection->setOrder('sort_order','ASC');
echo $groupCollection->getId();


Reference

Find helpful ? Consider Giving Kudos to this post.
Problem solved? Click Accept as Solution!"
Qaisar Satti

Re: How to instantiate an object in a template .phtml

You are using the objectmanager to instantiate. This is not good practice according to magento 2 documentation. Please provide a best practice solution.

Re: How to instantiate an object in a template .phtml

Hello

You need to create custom block like this

<?php
namespace QaisarSatti\HelloWorld\Block;

class HelloWorld extends \Magento\Framework\View\Element\Template
{

  protected $_productloader;
  protected $request;
  protected $_groupCollection;


  public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Catalog\Model\ProductFactory $_productloader,
        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $_groupCollection,
        \Magento\Framework\App\Request\Http $request

    ) {


        $this->_productloader = $_productloader;
        $this->request = $request;
        $this->_groupCollection = $_groupCollection;
        parent::__construct($context);
    }
//get the product
    public function getLoadProduct()
    {
          $id=10;
      
        return $this->_productloader->create()->load($id);
    }
//Get attribute group id
    public function getAttributeGroupId($attributeSetId)
    {
         $groupCollection = $this->_groupCollection->create();
         $groupCollection->addFieldToFilter('attribute_set_id',$attributeSetId);
         $groupCollection->addFieldToFilter('attribute_group_name','Grid Attributes');
         
         
         return $groupCollection->getFirstItem();

    }
    //Get all attribute groups
    public function getAttributeGroups($attributeSetId)
    {
         $groupCollection = $this->_groupCollection->create();
         $groupCollection->addFieldToFilter('attribute_set_id',$attributeSetId);
         
         $groupCollection->setOrder('sort_order','ASC');
         return $groupCollection;

    }
//get attribute by groups
 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;
 }
 
 }

 

Template files likes this 

$_product=$block->getLoadProduct();
$groupid=$block->getAttributeGroupId($_product->getAttributeSetId());
$attributesgroups=$block->getAttributeGroups($_product->getAttributeSetId());

$productAttributes=$_product->getAttributes();




?>
 
<?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;

?>
If you find my answer useful,   Please click Kudos & Accept as Solution.