Zunächst möchte ich mich entschuldigen, dass ich hier noch eine weitere "magento core override" -Frage gestellt habe, aber ich habe ungefähr zehn Tutorials verfolgt und fast alle ähnlichen Fragen gelesen, die hier gepostet wurden, kein Erfolg.
Ich muss eine Reihe von Kernmodellen und Klassen außer Kraft setzen. Der Code funktioniert, weil ich den Kern bereits geändert habe (in einer Test-Magento-Site) und es hat perfekt funktioniert. Aber ab und zu ist ein Magento-Update verfügbar und wenn wir die Updates anwenden würden, wären alle meine Änderungen verloren. Also muss ich stattdessen den Basiscode überschreiben. Ich möchte mein eigenes Modul erstellen, um den gesamten benötigten Code einzufügen, da ich nur 1 oder 2 Funktionen in jeder Klasse außer Kraft setzen muss, der Rest sollte wie Magento funktionieren.
Mein erster Versuch bestand darin, die Klasse Mage_Sales_Model_Order_Pdf_Invoice zu überschreiben. Ok, also habe ich mein Modul gemacht. Die Dateistruktur ist:
app / code / local / [Namespace] /Sales/etc/config.xml
app / code / local / [Namespace] /Sales/Helper/Data.php (Diese Klasse tut nichts, es ist nur eine leere Klasse. Ich habe es gemacht, weil ich irgendwo gelesen habe, dass Magento das Modul manchmal nicht erkennt, wenn es keine Helper-Klasse gibt)
app / code / local / [Namespace] /Sales/Model/Order/Pdf/Invoice.php
app / etc / modules / [Namensraum] _Sales.xml
Die Datei [namespace] _Sales.xml sieht folgendermaßen aus:
%Vor%Die Datei config.xml sieht folgendermaßen aus:
%Vor%Und die Invoice.php-Datei sieht folgendermaßen aus:
%Vor%Ich wollte das zuerst testen, bevor ich gehe und alle anderen Controller und Modelle überschreibe, die ich ändern muss.
Das Problem ist, dass es immer noch das ursprüngliche Modell verwendet.
Ich denke, der Modulcode und die Pfade sind korrekt, weil Magento mein benutzerdefiniertes Modell findet. Ich überprüfte, indem ich ins Backend ging und System- & gt; configuration- & gt; advanced
ansahIch habe den Cache komplett gelöscht, also nicht wahr.
Ich habe mit get_class festgestellt, welches Modell im Controller zurückgegeben wird: get_class (Mage :: getModel ('sales / order_pdf_invoice')) , dies gibt Mage_Sales_Model_Order_Pdf_Invoice
Ich weiß nicht, wo ich einen Fehler gemacht habe, aber ich bin mir sicher, dass ich einen gemacht habe: (
Es gibt einige Fehler, die ich wörtlich gefunden habe. Bitte korrigieren Sie diese Fehler: -
Alle Dateistrukturen, die Sie in der Frage im Code-Pool " local
" erwähnt haben, haben einen fehlenden Ordnernamen " code
" im Ordner " app
". Daher muss jede Dateistruktur Ihres lokalen Moduls wie folgt aussehen: " app/code/local/[namespace]/Sales/...
" .
Wenn diese Ordnerstruktur falsch ist, funktioniert das Modul [namespace]_Sales
möglicherweise nicht wie erwartet.
Zweitens, der Inhalt der Datei " config.xml
" ist ein bisschen falsch. Der richtige ist: -
Ich denke auch nicht, dass Sie hier andere Klassen hinzufügen müssen (was Sie in der PHP-Seite " [namespace]_Sales_Model_Order_Pdf_Invoice
" getan haben). Dies liegt daran, dass Magento alle Definitionen verwandter Bibliotheken automatisch lädt (einige Beispiele für Bibliotheksklassen sind " Varien
" und " Zend
"). Sie müssen nur ein Objekt dieser Bibliotheksklassen erstellen, und Sie können die Methoden vollständig verwenden.
Ich hoffe, es hilft.