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.