Magento – Magento 2 – Override template files in module

magento2overridestemplate

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

Best Answer

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!