Muss ich die vollständige Klasse in den "lokalen" Codepool kopieren, wenn ich Änderungen vornehme

magento.stackexchange https://magento.stackexchange.com/questions/4460

  •  16-10-2019
  •  | 
  •  

Frage

Kann jemand dies bitte für mich beantworten?

Wenn ich meine eigene Version einer Mage/Core -Datei im lokalen Codepool erstelle, überschreibt sie dann die Maage/Core -Datei vollständig überschreibt? Oder werden die Methoden, die nicht in meinem Code definiert wurden, noch aus der Kerndatei geerbt?

Beispiel. Die folgende Datei (exception.php) enthält verschiedene Methoden (Funktionen).

~ app
->  code
  ->  core
    ->  Mage
      ->  Customer
        ->  Exception.php

Ich möchte meine eigene Version hier einstellen:

~ app
->  code
  ->  local
    ->  Mage
      ->  Customer
        ->  Exception.php

Meine Version enthält nur 1 Methode (_beforeSave()). Die Kerndatei enthält viele. Werden alle anderen Methoden noch für das Magier der Originaldatei zur Verfügung stehen?

Hoffe das ist klar! Vielen Dank.

War es hilfreich?

Lösung

Wenn Sie eine Datei in den Ordner platzieren local (oder community) mit dem gleichen Weg wie eine Datei von core Die Kerndatei wird nutzlos.
Die Bestellung Magento sucht nach einer Datei app/code/local, app/code/community, app/code/core, lib. Wenn Sie nur eine Methode überschreiben möchten, kopieren Sie die Datei nicht in die local Mappe.
Hier ist ein schönes Tutorial Das zeigt Ihnen, wie Sie etwas richtig außer Kraft setzen.

Andere Tipps

Grundsätzlich gibt es drei verschiedene "gültige" Programme zur Programmlogikänderung in Magento

  1. Ereignisse verwenden
  2. Verwenden von Klassen- oder Controller -Umschreibungen
  3. Durch das Kopieren der vollständigen Datei an die local Codepool und dann ändern.

Ich würde empfehlen, 1. über 2. über 3. Wie bei Ereignissen können Sie Ihre Änderung ordnungsgemäß isolieren, und dies ist weniger wahrscheinlich zu Problemen bei der Aktualisierung Ihrer Magento -Version. 2. (wie Marius) erwähnt ist immer noch besser als das Kopieren von lokalem Kopieren in Bezug auf das Risiko, dass andere Erweiterungen oder Aktualisierungen die Dinge brechen.

Bei Verwendung der local Pool, Sie müssen immer den vollständigen Klassencode unterhalten (bei Aktualisierungen).

In Ihrem Fall sollten Sie prüfen, ob der von Ihnen angewandte Code mit einem Ereignis hinzugefügt werden kann - für die Mage_Customer Objekt aufgerufen customer_save_before.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top