Banner

Ultima revisión 24/11/2012

Crear un Módulo en PrestaShop: Mi primer Módulo

Como ya sabéis todos, PrestaShop es un framework para crear tiendas virtuales de forma relativamente sencilla. Está creado en PHP mediante el modelo MVC (aunque no es puramente MVC) y utiliza el sistema de Plantillas SMARTY. Podéis encontrar más información el el artículo qué es PrestaShop dónde, además, encontraréis platillas y módulos gratis.

La extensibilidad de PrestaShop gira en torno a los módulos, que son pequeños programas que hacen uso de las funciones de PrestaShop y cambian o agregan funcionalidades o personalizaciones para nuestra tienda.

Todos los módulos están localizados en la carpeta /modules, que se encuentra en la carpeta raíz de PrestaShop. Cada módulo que se quiera integrar tendrá una carpeta con su nombre dentro de dicha carpeta /modules.

Configuraciones Previas

Antes de hacer nada, cuando actualicemos o creemos un módulo es posible que tengamos que realizar múltiples cambios y recargar las páginas varias veces y puede que dichos cambios no sean aplicados. Esto se debe a que Smarty almacena una versión compilada de las páginas. Para evitar esto y forzar a Smarty a recompilar las plantillas en cada llamada, tenemos que ir a la opción de Rendimiento en la pestaña de Parámetros Avanzados y, una vez dentro, pincharemos en la opción Forzar la compilación que está en la zona superior en la parte de Smarty. Finalmente pinchamos en el botón de Guardar.

Principios técnicos en que se basa un módulo

Un módulo de PrestaShop se compone de:

ComponenteExplicación
Llamada como el módulo, que mantendrá la totalidad de los archivos del módulo y se encontrará en la carpeta /modules de PrestaShop.
Llamado como el módulo, localizado en la carpeta raíz. Este archivo PHP debe tener el mismo nombre que su carpeta raíz.
Que son logo.gif y logo.png que representan a este módulo. Se puede usar uno u otro indistintamente.
En todo módulo hay archivos .tpl que contienen el tema del módulo y son opcionales.
Si el módulo necesita de texto sensible de ser taducido. Es opcional.
Se crea automáticamente cuando se instala el módulo y numca hay que editarlo manualmente si no se sabe muy bien lo que se hace.
Permite manejar la visualización del módulo de distintas maneras, de acuerdo con el tema actual. Debe tener el mismo nombre que el módulo que contenga los archivos .tpl y de idioma si fuese necesario. Esta carpeta es esencial durante las modificaciones de módulo si se desea que el módulo se adapte sin tener que manipular los archivos originales. Es opcional.

Estructura básica de un módulo de PrestaShop

Un módulo de PrestaShop debe tener unas características que siempre son las mismas para todos y que son importantes.

AtributoExplicación
Este es un identificador interno, así que hágalo único, sin caracteres especiales o espacios, y en minúsculas.
Este es el título del cuadro que deberá contener este módulo en la lista de módulos del back office de PrestaShop. Usted puede utilizar un nombre ya existente, como Products, Blocks or Stats, o uno personalizado, como lo hicimos aquí. En este último caso, un nuevo cuadro se ha creado con su título.
para el módulo, aparece en la lista de módulos.
Este se muestra en la lista de módulos de PrestaShop.
Será utilizado como Título en la lista de módulos de back-office.
Será utilizado como Descripción en la lista de módulos de back-office.
Indica si se debe cargar la clase del módulo cuando se muestran los Módulos, en el back-office. Si se establece en 0, el módulo no se cargará y gastará menos recursos para generar el módulo de página. Si el módulo necesita mostrar un mensaje de advertencia en la página Módulos, entonces debe establecer este atributo en 1.
El método install() devolverá true si el módulo está instalado y puede ser utilizado.
El método uninstall() provocará la desinstalación pero además podrá eliminar la entrada en la base de datos asociada a ese módulo.

Creación del módulo

Primero nos vamos a la carpeta modules de nuestro PrestaShop y creamos una carpeta, en nuestro ejemplo, llamada moduletesting.

Segundo, buscamos un icono de 32x32 en formato PNG y otro de 16x16 en formato GIF, los renombramos como logo.ng y logo.gif y los copiamos a la carpeta que acabos de crear dentro de modules.

Tercero, creamos el moduletesting.php, teniendo en cuenta, que tiene que tener definidas todas las partes mencionadas anteriormente. El resultado quedaría:

<?php
/*
*  @author Pablo Fernández para islaVisual
*  @version  Release: 1.0b
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*/

if (!defined('_PS_VERSION_')) exit;

class ModuleTesting extends Module {
    public function __construct(){
        $this->name = 'ModuleTesting';
        $this->tab = 'front_office_features';
        $this->version = '1.0b';
        $this->author = 'Pablo Fernández para islaVisual';

        parent::__construct();

        $this->displayName = $this->l('Módulo de Pruebas');
        $this->description = $this->l('Módulo creado a partir de otro. Pruebas.');
    }

    public function install(){
        if (!parent::install() ||
            !$this->registerHook('leftColumn') ||
            !$this->registerHook('footer') ||
            !$this->registerHook('header') ||
            !$this->registerHook('rightColumn'))
            return false;
        return true;
    }

    public function uninstall(){
        if ( !parent::uninstall() ) Db::getInstance()->Execute( 'DELETE FROM `' . _DB_PREFIX_ . 'ModuleTesting`' );
        parent::uninstall();
    }

    public function hookLeftColumn( $params ){
        global $smarty;
        return $this ->display( __FILE__, 'ModuleTesting.tpl' );
    }    
    
    public function hookRightColumn( $params ){
        return $this->hookLeftColumn( $params );
    }
}

Cuarto, creamos el moduletesting.tpl que es el código que se correspondería con la visualización. Como se ha dicho, es un código que responde a las plantillas SMARTY.

El resultado quedaría:

<!-- Block Nuevo_Modulo -->
<div id="module_testing_block_left" class="block">
    <h3>Bienvenido</h3>
        <div class="block_content">
            <ul>
                <li><a href="{$base_dir}modules/moduletesting/moduletesting_page.php" title="Pincha este enlace para ver prueba">Pulsa aquí!</a></li>
            </ul>
        </div>
</div>
<!-- /Block Nuevo_Modulo -->

Quinto, crearemos el archivo moduletesting_page.php con el siguiente contenido:

<?php
global $smarty;
include('../../config/config.inc.php');
include('../../header.php');
 
$smarty->display(dirname(__FILE__) . '/moduletesting_page.tpl');
     
include('../../footer.php');
?>

Sexto, finalmente crearemos el archivo asociado moduletesting_page.tpl con el siguiente contenido:

<!-- Block Nuevo_Modulo -->
<div id="module_testing_block_left" class="block">
<h3>Mi Primer Módulo</h3>
    <div class="block_content">
        Esta es la página de prueba del módulo de Pruebas
    </div>
</div>

Instalación del módulo

La instalación del módulo es sencilla.

Primero nos dirigimos a la url de Administración, nos logamos y pinchamos en la opción de Módulos de la pestaña Módulos.

Una vez dentro, en el campo buscar, escribimos el displayName que pusimos en nuestro módulo, en este caso, Módulo de Pruebas y le damos al botón BUSCAR.

Si nos fijamos veremos que hay un recuadro en el que remarca que no está instalado y a la derecha hay un botón que pone instalar. Si le damos, se instalará y nos tendrá que decir un mensaje como Módulo (s) instalado con éxito.

Prueba y ejecución del módulo

Ahora probamos que se ejecute en nuestra tienda de pruebas. Si lo queremos ver estará en la parte de debajo de la columna izquierda en el front-end de la tienda.