1

What is the correct way to override a template file ? I need to display custom text in place of In Stock and Price on the product page.

enter image description here

I want to override the template -

Magento_Catalog/view/frontend/templates/product/view/type/default.phtml for In stock.

However, I cannot figure what would be the correct XML for it.

I've tried -

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="product.info.type">
            <block class="Magento\Catalog\Block\Product\View\Type\Simple" name="product.info.simple" as="product_type_data" template="Vendor_Module::product/view/type/default.phtml" />
        </referenceBlock>
    </body>
</page>

I can't find out which file should be overridden to change the text for price.

I would really appreciate it if you could explain how to write the XML file for overriding templates.

UPDATED catalog_product_view.xml -

<?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="product.info.type">
        <block class="Magento\Catalog\Block\Product\View\Type\Simple" name="product.info.simple" as="product_type_data" template="Vendor_Module::product/view/type/default.phtml"/>
    </referenceContainer>
</body>
</page>

Vendor/Module/view/templates/product/view/type/default.phtml -

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

// @codingStandardsIgnoreFile

?>
<?php /* @var $block \Magento\Catalog\Block\Product\View\AbstractView */?>
<?php $_product = $block->getProduct() ?>

<?php if ($block->displayProductStockStatus()): ?>
    <?php if ($_product->isAvailable()): ?>
        <div class="stock available" title="<?= /* @escapeNotVerified */ __('Availability') ?>">
            <span><?= /* @escapeNotVerified */ __('In stock with static text') ?></span>
        </div>
    <?php else: ?>
        <div class="stock unavailable" title="<?= /* @escapeNotVerified */ __('Availability') ?>">
            <span><?= /* @escapeNotVerified */ __('Out of stock') ?></span>
        </div>
    <?php endif; ?>
<?php endif; ?>
0

If want to override below file using module:

Magento_Catalog/view/frontend/templates/product/view/type/default.phtml

Create

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

and put

<?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="product.info.type">
        <block class="Magento\Catalog\Block\Product\View\Type\Simple" name="product.info.simple" as="product_type_data" template="{Vendor}_{Module}::product/view/type/default.phtml"/>
    </referenceContainer>
</body>
</page>

Now create default.phtml at:

app/code/{Vendor}/{Module}/view/frontend/templates/product/view/type/default.phtml

Now you can add you code in phtml.

Hope above will Help!

  • Thanks for this. Can you please explain how to create the xml file. How do you find which container and block to use? Do the attributes name and as have to be same as in Magento_catalog's catalog_product_view.xml? – coderGeek Mar 31 at 1:07
  • Which files should I edit to change the Price? – coderGeek Mar 31 at 1:08
  • First I check file name using template path hint. after find file name we can search that file in xml. we get reference block/container name from here. – Pawan Mar 31 at 1:48
  • you can see for override I have used same reference container, block class, name etc. I have only change phtml with our module! – Pawan Mar 31 at 1:51
  • it doesn't work – coderGeek Apr 1 at 13:43

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.