2012-01-22 13 views
8

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 :(

+1

¿Por qué espacios en blanco aquí? '' – Zyava

+0

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

Respuesta

7

Hay algunos errores que he encontrado literalmente.Por favor, corrija los errores: -

Todas las estructuras de archivos, que usted ha mencionado en la pregunta dentro de la piscina de código "local", tener un nombre de carpeta que falta dentro de la carpeta "code" "app". Entonces, cada estructura de archivos de su módulo local debe ser como: "app/code/local/[namespace]/Sales/...".

Si esta estructura de carpetas es incorrecta, entonces también su [namespace]_Sales módulo puede no funcionar como se esperaba.

En segundo lugar, el contenido del archivo "config.xml" es un poco incorrecto. La correcta será: -

<?xml version="1.0"?> 
<config> 
    <modules> 
    <[namespace]_Sales> 
     <version>0.1.0</version> 
    </[namespace]_Sales> 
    </modules> 

    <global> 
    <helpers> 
     <!-- 
     This node will be the unique identifier of your module, 
     and it will be used every time your code requires referencing your own module. 
     This shouldn't clash with other unique identifiers used in your Magento system. 
     Normally all the characters are kept in small case for this, 
     however, I haven't tried with the upper case. 
     But it will be best to keep your unique identifier in small case only. 
     --> 
     <[namespace]sales> 
     <class>[namespace]_Sales_Helper</class> 
     </[namespace]sales> 
    </helpers> 

    <models> 
     <!-- 
     If this is not provided, then Magento will not know your module's starting part of Model Class Names. 
     --> 
     <[namespace]sales> 
     <class>[namespace]_Sales_Model</class> 
     </[namespace]sales> 
     <sales> 
     <rewrite> 
      <order_pdf_invoice>[namespace]_Sales_Model_Order_Pdf_Invoice</order_pdf_invoice> 
     </rewrite> 
     </sales> 
    </models> 
    </global> 
</config> 

Además no creo que va a requerir la adición de diferentes clases aquí (que usted ha hecho en "[namespace]_Sales_Model_Order_Pdf_Invoice" página PHP clase). Esto se debe a que Magento carga automáticamente todas las definiciones de bibliotecas relacionadas (algunos ejemplos de clases de biblioteca son "Varien" y "Zend"). Solo necesitará hacer un objeto de esas clases de biblioteca y podrá usar los métodos completamente.

Espero que ayude.

+1

Sí, escribí la pregunta un poco rápido y mal. Todos mis archivos están, por supuesto, en la aplicación/código/carpeta local y no en la aplicación/local. voy a mirar a sus otras sugerencias, sin embargo, gracias por su ayuda :) – itd

+1

@itd - Más la bienvenida –

+0

Gracias, funcionó. El archivo config.xml tenía errores, como dijiste. – itd

Cuestiones relacionadas