Was ist der richtige Weg / Ansatz, um eine Magento-Vorlage zu ändern?

15

Bitte schlagen Sie mir den richtigen Ansatz vor. Ich möchte die Seite "EMAIL to Friend" in einem Popup-Fenster anpassen, wenn der Benutzer auf die Schaltfläche klickt (dieses Produkt per E-Mail senden). Durch das Aktivieren von Vorlagenhinweisen habe ich herausgefunden, dass die Schaltfläche mit gerendert wird

frontend / rwd / default / template / catalog / product / view / sharing.phtml

Und die entsprechende Layoutdatei ist catalog.xml(im Frontend / rwd / default / layout)

Also habe ich local.xmlin dem selben Ordner einen erstellt, in dem catalog.xmles folgenden Code gibt (nur den ich test.phtmlanstatt sharing.phtml'Debug' angegeben habe)

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>

        <catalog-product-view>
            <reference name="content">
                <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                    <block type="catalog/product_view" name="product.info.sharing" as="sharing" template="catalog/product/view/test.phtml"/>
                </block>
            </reference>
        </catalog-product-view>

    </default>
</layout>

Aber nichts passiert, ich meine, wie kann ich das Standarddesign des Themas ändern (überschreiben), ohne bestehende xmlund phtmlDateien zu ändern ?

Dimag Kharab
quelle

Antworten:

10

Dies ist, was Sie in Ihre local.xmlDatei einfügen sollten .

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view>
        <reference name="product.info.sharing">
            <action method="setTemplate">
                <template>catalog/product/view/test.phtml</template>
            </action>
        </reference>
    </catalog_product_view>
</layout>

Fehler, die Sie gemacht haben

  • Sie haben zwei Handles für Layoutaktualisierungen verwendet : defaultund catalog-product-view. Das ist falsch. Sie benötigen nur ein Handle für die Layoutaktualisierung. Das richtige, das Sie hier verwenden sollten, istcatalog_product_view

  • So catalog-product-viewist es für Magento unbekannt. Der richtige Name istcatalog_product_view

  • Da der Freigabeblock bereits über definiert ist catalog.xml, müssen Sie diesen Block jetzt referenzieren und dann die Vorlage ändern, indem Sie eine Aktion hinzufügen setTemplate. Das ist, was das obige Skript macht.

Hoffe du kommst auf die Idee

Rajeev K Tomy
quelle
Ich habe Ihre local.xml verwendet, sie wird jedoch immer noch in der vorhandenen Datei (ich habe eine test.phtml erstellt) im angegebenen Ordner
angezeigt
Hast du deinen Cache geleert? das soll funktionieren, wenn du alles richtig gemacht hast.
Rajeev K Tomy
Yup-Caching ist in meinem Fall deaktiviert und ich habe auch neu indiziert (ich denke, es wurde nicht benötigt)
Dimag Kharab
Fügen Sie dies <reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>direkt unter dem Knoten hinzu <catalog_product_view>. und prüfen Sie, ob der Inhalt der Datei test.phtml im unteren Bereich einer Produktansichtsseite verfügbar ist
Rajeev K Tomy
Noch kein Glück, Bruder
Dimag Kharab
10

Ich werde versuchen, eine allgemeine Antwort zu geben.

So ändern Sie Vorlagen

In Ihrem Design können Sie alle phtmlDateien aus dem Standarddesign oder dem übergeordneten Design überschreiben . Kopieren Sie die Originaldatei nach app/design/frontend/[package]/[theme]/template/[path/to/phtml]und nehmen Sie Ihre Änderungen vor.

Wenn Sie noch kein projektspezifisches benutzerdefiniertes Thema haben, z. B. weil Sie gerade ein Thema gekauft haben, stellen Sie sicher, dass Sie eines unter erstellen

app/design/frontend/[original-package]/[project-name]

Es wird von geerbt [original-package]/[default], Sie müssen nicht alles aus der Standardeinstellung kopieren, sondern nur die Dateien, in denen Sie Änderungen vornehmen müssen.

Modulspezifische Änderungen

Eine Alternative zum Überschreiben der phtmlDatei besteht darin, den Vorlagenpfad zu ändern. Dies kann normalerweise in Layout-XML wie folgt erfolgen:

<reference name="the-block-name">
    <action method="setTemplate"><name>path/to/new/template.phtml</name></action>
</reference>

Dies ist jedoch für Module gedacht, die eine Vorlage wechseln müssen, nicht für themenspezifische Änderungen. Die neue Vorlage sollte base/defaultdann drin sein .

Verwendung von local.xml / theme.xml

Die local.xmlDatei muss sich im Verzeichnis des aktuellen Themas befinden, das Sie verwenden, dh

app/design/frontend/[package]/[theme]/layout

Mehrere local.xmlDateien in der Fallback-Hierarchie werden nicht berücksichtigt. Die erste davon, die gefunden werden kann, wird verwendet:

app/design/frontend/[package]/[theme]/layout/local.xml
app/design/frontend/[package]/default/layout/local.xml
app/design/frontend/base/default/layout/local.xml

(unter der Annahme einer Standardhierarchie und keiner benutzerdefinierten Hierarchie)

Änderungen vornehmen

Sie sollten nur Änderungen in local.xml vornehmen und keine Definitionen wiederholen, die sich bereits in den ursprünglichen XML-Dateien befinden. Vermeiden Sie also das Kopieren von XML-Dateien aus dem Standarddesign, um Änderungen direkt in den Dateien vorzunehmen. Halten Sie das layoutVerzeichnis Ihres Themas sauber!

Typische Elemente local.xmlsind <remove>das vollständige Entfernen vorhandener Blöcke <action method="unsetChild">und <action method="append">das Verschieben eines Blocks von einem übergeordneten Element in ein anderes oder das Aufrufen anderer Methoden für vorhandene Blöcke, um deren Verhalten zu ändern.

Magento 1.9

Ab Magento 1.9 empfiehlt es sich, layout/local.xmldiese Änderungen nicht durchzuführen, sondernetc/theme.xml

Kurz gesagt, Sie können ein Layout-Update in app / design / frontend / yourpackage / etc / theme.xml hinzufügen. Der Vorteil ist, dass Sie die Ladereihenfolge Ihrer Layout-Aktualisierungen steuern können. Bevor Magento 1.9 local.xml immer zuletzt geladen wurde, war es unmöglich, Layout-Direktiven danach auszuführen.

Ich verwende local.xml nicht mehr für projektspezifische Themenänderungen. Ich denke, local.xml wird nur aus Gründen der Abwärtskompatibilität (in 1.9 und höher) verwendet, da es keinen Sinn mehr macht, es zu verwenden. Local.xml wird auch in Magento 2 ( https://github.com/magento/magento2/issues/1037) entfernt ) entfernt.

Quelle: https://erfanimani.com/dont-use-local-xml/

Fabian Schmengler
quelle