Webkul
Services
Technologies Bagisto QloApps
iOS Android SAP BigCommerce Wix
Trusted by
Samsung Intel Toyota Walmart Disney Nokia Nestlé Decathlon
See all customers
Back to Top
DEV

Override phtml file in referenceBlock dynamically

Hello Friends!!!

In this blog, we are going to learn how we can override a phtml file in referenceBlock dynamically in the layout file.

For example, we have created a layout file custommodule_index_index.xml inside the app/code/Vendor/Custommodule/view/frontend/layout/ directory. Now, we have to override the block “custom_block_home”.

Then, we can override it by using the following methods:

Based on a check of the configuration field in the layout file: In this way, we add the “ifconfig” attribute in the “action” tag to set the template. Please look into the following code:

<?xml version="1.0"?>
<!--
/**
 * Vendor
 *
 * @category  Vendor
 * @package   Vendor_Custommodule
 * @author    Vendor
 * @copyright Vendor(https://example.com)
 * @license   https://example.com/license.html
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="blank" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="custom_block_home">
            <action method="setTemplate" ifconfig="custommodule/configuration/isactive">
                <argument name="template" xsi:type="string">Vendor_Custommodule::home.phtml</argument>
            </action>
        </referenceBlock>
    </body>
</page>

Based on a method’s result: In this way, we can call a method from a helper file, and according to the result of the method, the template will be set in block dynamically. Please refer to the following code:

<?xml version="1.0"?>
<!--
/**
 * Vendor
 *
 * @category  Vendor
 * @package   Vendor_Custommodule
 * @author    Vendor
 * @copyright Vendor (https://example.com)
 * @license   https://example.com/license.html
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="blank" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="custom_block_home">
            <action method='setTemplate'>
                <argument name="template" xsi:type="helper" helper="Vendor\Custommodule\Helper\Data::getHomeTemplate">
                </argument>
            </action>
        </referenceBlock>
    </body>
</page>

We have created the following method, in the Data.php file inside the app/code/Vendor/CustomModule/Helper/ directory.

    /**
     * Get Home Template
     *
     * @return string
     */
    public function getHomeTemplate()
    {
        $template = "";
        $check = $this->isModEnabled(); //you can call here your method to get the result for required condition
        if ($check) {
            $template =  'Vendor_Custommodule::home.phtml';
        } else {
            $template = 'Vendor_PrevCustommodule::home.phtml';
        }

        return $template;
    }

Hope this will be helpful. Thanks 🙂

. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


Be the first to comment.

Back to Top

Message Sent!

If you have more details or questions, you can reply to the received confirmation email.

Back to Home