1

I have created custom phtml file, but that file is calling to all the products magento2

Please find the below code:

<referenceContainer name="product.info.form.content" >
            <block
                    class="Vendor\Module\Block\Product\View\RewardMesg"
                    name="reward_frontend_msg"
                    template="Vendor_Module::product/view/rewardMesg.phtml" before="product.info.addtocart"/>
</referenceContainer>

My block code is:

namespace Vendor\Module\Block\Product\View;

use Magento\Framework\View\Element\Template;
use Magento\Framework\Registry;

class RewardMesg extends Template
{
    /**
     * @var Registry
     */
    protected $registry;

    /**
     * @var \Magento\Catalog\Model\Product
     */
    protected $product;

    /**
     * ProductView constructor.
     * @param Template\Context $context
     * @param array $data
     * @param Registry $registry
     */
    public function __construct(
        Template\Context $context,
        array $data = [],
        Registry $registry
    )
    {
        $this->registry = $registry;
        parent::__construct($context, $data);
    }

    /**
     * @return \Magento\Catalog\Model\Product
     */
    public function getProduct()
    {
        if (is_null($this->product)) {
            $this->product = $this->registry->registry('product');
        }

        return $this->product;
    }
}

Help me appriciate.

Thanks

  • You want call your phtml in all the product pages ?? – Prathap Gunasekaran Mar 28 '19 at 8:02
  • Yes @Prathap Can you please send the exact code – shivashankar m Mar 28 '19 at 8:03
  • @shivashankarm check my answer – Rakesh Donga Mar 28 '19 at 8:27
1

create below file and add below code after check it

app/code/Vendor/Module/view/frontend/layout/catalog_product_view.xml

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="product.info.main">
            <block class="Vendor\Module\Block\Product\View\RewardMesg" name="reward_frontend_msg" after="product.info.price" template="Vendor_Module::product/view/rewardMesg.phtml"/>
        </referenceContainer>
    </body>
</page>

Please don't forget to clear cache after change in xml files

| improve this answer | |
  • Hi @Rakesh it is working fine but i would like add it before qty section – shivashankar m Mar 28 '19 at 9:38
  • i have updated my answer please check it – Rakesh Donga Mar 28 '19 at 9:58
  • Hi @Rakesh the above code is working fine – shivashankar m Mar 28 '19 at 10:26
1

Try this,

Add the catalog_product_view.xml in the below path in your custom module

app/code/Vendor/ModuleName/view/frontend/layout/catalog_product_view.xml

then add the below code in it

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
   <referenceContainer name="content">
        <block class="Vendor\Module\Block\Product\View\RewardMesg"  name="reward_frontend_msg" template="Vendor_Module::product/view/rewardMesg.phtml" before="product.info.addtocart" after="page.main.title">
        </block>
    </referenceContainer>
</body>
</page>

and place your phtml in the respective path

app/code/Vendor/ModuleName/view/frontend/templates/product/view/rewardMesg.phtml

Your phtml will load in after product title and before add to cart button.

Hope this helps

| improve this answer | |
1
  1. app/code/Vendor/Modulename/view/frontend/layout/catalog_product_view.xml

    <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
        <body>
            <block class="Vendor\Module\Block\Blockname" name="reward_frontend_msg" template="Vendor_Module::product/view/rewardMesg.phtml"/>
        </body>
    </page>
    
  2. app/code/Vendor/Modulename/view/frontend/templates/product/view/rewardMesg.phtml

    //Diplsay the bellow code where you want to block on product page
    
    <?php echo $block->getBlockHtml('reward_frontend_msg'); ?>
    
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.