2011-05-26 26 views
8

Me gustaría cambiar el módulo prestashop existente sin copiarlo y crear uno nuevo. Sé que es posible anular los archivos .tpl en prestashop, pero ¿es posible hacer lo mismo con las clases php? Por ejemplo, me gustaría cambiar blockcart para que pueda ser enganchado en la parte superior. ¡Como la versión original no tiene ese gancho, necesito cambiar la función de instalación()! No puedo cambiar el archivo original de la fuente (sería una mala idea, ¿verdad ...)? Necesito anular la función install() heredando el módulo blockcart. ¿Es posible hacerlo y dónde puedo encontrar ejemplos?Prestashop - función de anulación en el módulo de prestashop existente

Respuesta

11

Utilizo mi propia anulación para la clase FrontController para permitir la visualización de la salida del módulo en puntos arbitrarios en archivos tpl, esto significa que el módulo no necesita admitir un gancho en particular. Se implementa a través de un plugin sabelotodo, por lo que puede, por ejemplo, el uso:

{plugin module='blockcart' hook='rightColumn'} 

Lo anterior se fuerce el módulo de salida de lo que mostraría si enganchado a la columna de la derecha donde lo anterior se inserta la etiqueta (que puede ser en cualquier lugar en cualquier archivo tpl). Puede "desenganchar" el módulo de la columna de la derecha para que solo se muestre donde lo desea utilizando esta técnica. Lo he usado en un sitio de producción con gran éxito.

Hay una serie de artículos que describen cómo funciona (con el código requerido) disponible en:

Prestashop 1.4 Plugins

+0

Wow great solution Paul! –

+0

Siempre he pensado que, si bien el sistema de Módulos y ganchos funciona en muchos casos, hay veces en que es demasiado inflexible. Me alegra que lo haya encontrado útil. –

+0

Excelente Paul! Por cierto, ¿puedo pasar algunos parámetros al gancho del módulo? ¡Gracias! –

3

En Prestashop 1.4 puede anular las clases principales y las plantillas de módulo Hoy no es posible sobrescribir un archivo php de módulo, pero estamos trabajando en ello.

1

Desde la versión 1.6.0.11 de PrestaShop, hay una nueva característica que permite a los desarrolladores para anular una clases de instancia del módulo.

Invalidar la clase de instancia de un módulo extendiéndolo Para anular la clase ejemplo de un módulo, hay que extenderla, dando a la clase extendida del mismo nombre y la adición de anulación sufijo:

<?php 
if (!defined('_PS_VERSION_')) 
    exit; 
class BlockUserInfoOverride extends BlockUserInfo 
{ 
    public function hookDisplayNav($params) 
    { 
     return '<div class="header_user_info"><a>Test</a></div>'; 
     // return $this->display(__FILE__, 'nav.tpl'); 
    } 
} 

Fuente: http://build.prestashop.com/howtos/module/how-to-override-modules/

Cuestiones relacionadas