en primer lugar, me disculpo por hacer otra pregunta "anulación de núcleo magento" aquí, pero seguí unos 10 tutoriales y leí casi todas las preguntas similares publicadas aquí, sin éxito.magento no puede anular el modelo principal
Tengo que anular un montón de modelos básicos y clases. El código funciona, porque ya cambié el núcleo (en un sitio magento de prueba) y funcionó perfecto. Pero de vez en cuando hay disponible una actualización de Magento y si aplicamos las actualizaciones, todos mis cambios se perderán. Así que tengo que anular el código base en su lugar. Quiero hacer mi propio módulo para poner todo el código requerido, porque solo tengo que anular 1 o 2 funciones en cada clase, el resto debería funcionar como lo pretendía Magento.
Mi primer intento fue anular la clase Mage_Sales_Model_Order_Pdf_Invoice. Ok, entonces hice mi módulo. La estructura de archivos es:
app/código/local/[espacio de nombres] /Sales/etc/config.xml
app/código/local/[espacio de nombres] /Sales/Helper/Data.php (Esta clase no hace nada, es sólo una clase vacía. lo hice porque he leído en alguna parte que Magento veces no reconoce el módulo si no hay una clase ayudante)
app/código/local /[namespace]/Sales/Model/Order/Pdf/Invoice.php
app/etc/modules/[espacio de nombres] _Sales.xml
El [namespace] archivo _Sales.xml se ve de esta manera:
<?xml version="1.0"?>
<config>
<modules>
<[namespace]_Sales>
<active>true</active>
<codePool>local</codePool>
</[namespace]_Sales>
</modules>
</config>
El archivo config.xml se ve así:
< ?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>
y el archivo Invoice.php se parece a esto:
<?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
}
}
Quería probar esto primero antes de ir y anular todos los otros controladores y modelos que tengo que cambiar.
El problema es que todavía usa el modelo original.
Creo que el código del módulo y las rutas son correctas, porque magento encuentra mi modelo personalizado. Comprobé por entrar en el backend y miré Sistema-> configuración-> avanzada
Despejé la caché por completo, por lo que no es.
que utilizan get_class para determinar qué modelo se devuelve en el controlador: get_class (Mago :: getModel ('ventas/order_pdf_invoice')), esto devuelve Mage_Sales_Model_Order_Pdf_Invoice
no sé donde hice un error, pero estoy seguro de que hice uno :(
¿Por qué espacios en blanco aquí? ' xml version =" 1.0 "?>' – Zyava
Copié la estructura xml de ejemplos y la modifiqué según mi módulo personalizado. No creo que el espacio en blanco sea necesario, pero funciona de esta manera también. – itd