Wie überschreibe ich final_price.phtml in Magento 2?


7

Ich möchte final_price.phtml überschreiben. Ich habe versucht, in meinem Modul zu folgen, aber es funktioniert nicht. Ich habe app / code / MyVendor / MyModule / view / frontend / layout / catalog_product_prices.xml erstellt

<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="render.product.prices">
        <arguments>
            <argument name="default" xsi:type="array">
                <item name="prices" xsi:type="array">
                    <item name="final_price" xsi:type="array">
                        <!-- item name="render_class" xsi:type="string">Magento\Catalog\Pricing\Render\FinalPriceBox</item> -->
                        <item name="render_template" xsi:type="string">MyVendor_MyModule::product/price/final_price.phtml</item>
                    </item>
                </item>
            </argument>
        </arguments>
    </referenceBlock>
</layout> 

Außerdem habe ich auch eine Vorlagendatei erstellt. unter app / code / MyVendor / MyModule / view / frontend / templates / product / price / final_price.phtml Und in final_price.phtml habe ich meinen benutzerdefinierten Code geschrieben.

Aber es funktioniert nicht. Kann mir jemand sagen, was in diesem Code fehlt?


Haben Sie danach den Magento-Cache geleert?
Amit Bera

Ja, ich habe überprüft, ob der Cache deaktiviert ist.
Dhaval Solanki

Haben Sie jemals herausgefunden, wie das über Layouts geht? Weil die Plug-in-Lösung ein bisschen schrecklich ist ...
Pol Ravalitera

@pol Nein Ich weiß nicht, ob es mit Layout möglich ist oder nicht.
Dhaval Solanki

Überprüfen Sie das Fehlerprotokoll und kommentieren Sie es hier
Sameer Bhayani

Antworten:


12

Sie können eine alternative Methode zum Überschreiben der Vorlage verwenden. Verwenden Sie den folgenden Code. Es wird klappen.

app / code / MyVendor / MyModule / etc / di.xml

<type name="\Magento\Catalog\Pricing\Render\FinalPriceBox">
        <plugin name="MyVendor_MyModule_change_template" type="MyVendor\MyModule\Plugin\FinalPricePlugin" />
</type>

MyVendor \ MyModule \ Plugin \ FinalPricePlugin.php

<?php
namespace MyVendor\MyModule\Plugin;

class FinalPricePlugin
{
    public function beforeSetTemplate(\Magento\Catalog\Pricing\Render\FinalPriceBox $subject, $template)
    {
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $enable=$objectManager->create('MyVendor\MyModule\Helper\Data')->chkIsModuleEnable();
        if ($enable) {
            if ($template == 'Magento_Catalog::product/price/final_price.phtml') {
                return ['MyVendor_MyModule::product/price/final_price.phtml'];
            } 
            else
            {
                return [$template];
            }
        } else {
            return[$template];
        }
    }
}

Hoffe es wird für dich funktionieren.


Freut mich zu hören, dass es dir hilft.
Kishan Patadia

sehr hilfreich @kishan Patadia
Ramkishan Suthar

GENIAL-!
Pini

3
Die Verwendung des Plugins ist keine gute Lösung, denn wenn Sie mehrere Themen haben, wird immer eine Vorlage benötigt, die im Plugin erwähnt wird. Stellen Sie daher aus dem Layout-XML Ihre benutzerdefinierte Vorlage ein, die in meinem folgenden Beitrag erwähnt wird
Pradeep Kumar

Bitte posten Sie den vollständigen Inhalt der Datei di.xml. Ihr Code ist nur ein Teil davon und funktioniert nicht
zekia

2

Dafür muss kein Plugin geschrieben werden, wir müssen es auf XML-Ebene tun

Erstellen Sie eine Layout-XML

app \ code \ MYNAME_SPACE \ MY_MODULE \ view \ base \ layout \ catalog_product_prices.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="render.product.prices">
        <arguments>
            <argument name="default" xsi:type="array">
                <item name="prices" xsi:type="array">
                    <item name="final_price" xsi:type="array">
                        <item name="render_template" xsi:type="string">MYNAME_SPACE_MY_MODULE::product/price/final_price.phtml</item>
                    </item>
                </item>
            </argument>
        </arguments>
    </referenceBlock>
</layout>

Die obige XML-Datei wirkt sich nur auf einfache Produkte aus, wenn Sie das Bundle-Produkt dann ändern müssen

<argument name="default" xsi:type="array">

sollte sein

<argument name="bundle" xsi:type="array">

oder im Falle eines konfigurierbaren Produkts

<argument name="configurable" xsi:type="array">

Erstellen Sie eine HTML-Datei

\ app \ code \ MYNAME_SPACE \ MY_MODULE \ view \ base \ templates \ product \ price \ final_price.phtml

Kopieren Sie final_price vom Kernmodul und ändern Sie es nach Bedarf

Um andere Preistypen zu ändern, können Sie sich darauf beziehen

Hersteller \ Magento \ Modul-Bundle \ Ansicht \ Basis \ Layout \ Katalog_Produkt_Preise.xml


Das hat bei mir nicht funktioniert. Verwenden von Magento 2.2.0.
JDhildeb

1

Ich konnte überschreiben, final_price.phtmlindem ich das Verzeichnis unter meinem Thema neu erstellte.

Originaldatei lebt

vendor/magento/module-catalog/view/base/templates/product/price/final_price.phtml

Neue Datei lebt hier

/app/design/frontend/NAMESPACE/MYTHEME/Magento_Catalog/templates/product/price/final_price.phtml

Das funktioniert nicht in Magento 2.3
Charly

0

Überprüfen Sie zuerst Ihre final_price.phtml auf Fehler.

Leeren und bereinigen Sie nun den Cache mit cli-Befehlen

bin / magento cache: sauber

Bin / Magento-Cache: Flush

Jetzt aktualisieren.


Keine final_price.phtml hat keinen Fehler, den ich überprüft habe. und Cache ist deaktiviert dann habe ich auch oben versucht, aber kein Glück.
Dhaval Solanki

0

Ich hatte das gleiche Problem, das ich nicht überschreiben konnte final_price.phml. Ich löste das Problem durch Zugabe sequencezu dem module.xmlmit Magento_Catalog (und dann setup:upgrade):

    <sequence>
        <module name="Magento_Catalog" />
    </sequence> 

0
  1. Erstellen Sie app / code / Vendor / Module / view / base / layout / catalog_product_prices.xml:
    <?xml version="1.0"?>
    <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
        <referenceBlock name="render.product.prices">
            <arguments>
                <argument name="configurable" xsi:type="array">
                    <item name="prices" xsi:type="array">
                        <item name="final_price" xsi:type="array">
                            <item name="render_template" xsi:type="string">Cloudinfo_ChangesTheme::product/price/final_price.phtml</item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </layout>
  1. Fügen Sie in module.xml hinzu:
       <sequence>
           <module name="Magento_Catalog" />
       </sequence>
  1. Erstellen Sie app / code / Vendor / Moduleview / base / templates / product / price / final_price.phtml

  2. bin / magento-Setup: Upgrade && bin / magento-Setup: di: kompilieren && bin / magento-Setup: statischer Inhalt: Bereitstellen && bin / magento c: c && bin / magento c: f


Funktioniert dieses Konzept für M2.3.4?
Nagaraju K
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.