Prima di tutto, mi scuso per aver chiesto ancora un'altra domanda "override magento core" qui, ma ho seguito circa 10 tutorial e letto quasi tutte le domande simili pubblicate qui, senza successo.magento non può sostituire il core model
Devo eseguire l'override di alcuni modelli e classi principali. Il codice funziona, perché ho già cambiato il core (in un sito di test di Magento) e ha funzionato perfettamente. Ma ogni tanto un aggiornamento Magento è disponibile e se dovessimo applicare gli aggiornamenti tutte le mie modifiche andrebbero perse. Quindi devo sostituire il codice base. Voglio creare il mio modulo per inserire tutto il codice richiesto, perché devo solo sostituire 1 o 2 funzioni in ogni classe, il resto dovrebbe funzionare come Magento.
Il mio primo tentativo è stato quello di ignorare la classe Mage_Sales_Model_Order_Pdf_Invoice. Ok, quindi ho creato il mio modulo. La struttura dei file è:
app/code/local/[namespace] /Sales/etc/config.xml
app/code/local/[namespace] /Sales/Helper/Data.php (Questa classe non fa nulla, è solo una classe vuota. l'ho fatto perché ho letto da qualche parte che Magento a volte non riconosce il modulo se non v'è nessuna classe Helper)
app/code/local /[namespace]/Sales/Model/Order/Pdf/Invoice.php
app/etc/modules/[namespace] _Sales.xml
Il [spazio dei nomi] File _Sales.xml appare in questo modo:
<?xml version="1.0"?>
<config>
<modules>
<[namespace]_Sales>
<active>true</active>
<codePool>local</codePool>
</[namespace]_Sales>
</modules>
</config>
Il file config.xml è simile al seguente:
< ?xml version="1.0"?>
<config>
<modules>
<[namespace]_Sales>
<version>0.1.0</version>
</[namespace]_Sales>
</modules>
<global>
<helpers>
<sales>
<class>[namespace]_Sales_Helper</class>
</sales>
</helpers>
<models>
<sales>
<rewrite>
<order_pdf_invoice>[namespace]_Sales_Model_Order_Pdf_Invoice</order_pdf_invoice>
</rewrite>
</sales>
</models>
</global>
</config>
e il file Invoice.php assomiglia a questo:
<?php
/****I'm adding some different classes here*******************************/
include_once Mage::getBaseDir('lib')."/myclass.php";
include_once Mage::getBaseDir('lib')."/another_library.php";
/********************************************************/
class [namespace]_Sales_Model_Order_Pdf_Invoice extends Mage_Sales_Model_Order_Pdf_Invoice
{
public function getPdf($invoices = array())
{
//my code
}
}
Volevo testare questo prima prima di andare a scavalcare tutti gli altri controller e modelli che devo modificare.
Il problema è che utilizza ancora il modello originale.
Penso che il codice del modulo e i percorsi siano corretti, perché Magento trova il mio modello personalizzato. Ho controllato andando nel back-end e ho visto Sistema-> configurazione-> avanzato
Ho cancellato completamente la cache, quindi non è così.
ho usato get_class per determinare quale modello viene restituito nel controller: get_class (Mage :: getModel ('vendite/order_pdf_invoice')), restituisce Mage_Sales_Model_Order_Pdf_Invoice
non so dove ho fatto un errore ma sono sicuro di averlo fatto uno :(
Perché gli spazi bianchi qui? ' xml version =" 1.0 "?>' – Zyava
Ho copiato la struttura xml degli esempi e l'ho modificata di conseguenza al mio modulo personalizzato. Non penso che lo spazio bianco sia necessario, ma funziona anche in questo modo. – itd