LogoLogo
Homepage
  • Documentations for PrestaShop 1.4
  • English documentation 1.4
    • Getting Started
    • Updating PrestaShop
    • User Guide
      • Training
      • Customizing your shop
      • Browsing the front-office
      • Connecting to the PrestaShop back-office
      • Adding Products and Product Categories
      • A Look inside the Catalog
      • Managing Customers
      • Managing Orders
      • Managing Payment Methods
      • Managing Shipping
      • Understanding Statistics
      • Managing Modules
      • Managing Employees
      • Understanding the Preferences
      • Exploring PrestaShop's Tools
      • PrestaShop Support
    • System Administrator Guide
    • Developer Guide
      • Developer tutorials
        • Using the REST webservice
          • Chapter 1 - Creating Access to Back Office
          • Chapter 2 - Discovery - Testing access to the web service with the browser
          • Chapter 3 - First steps - Access the Web service and list client
            • 3.1 - Access the web service
            • 3.2 - Handling errors
            • 3.3 - List clients
          • Chapter 4 - Retrieve Data - Retrieving a Client
          • Chapter 5 - Modification - Update client
          • Chapter 6 - Creation - Remote Online Form
          • Chapter 7 - Removal - Remove customer accounts from the database
          • Chapter 8 - Advanced Use
          • Cheat-sheet - Concepts outlined in this tutorial
        • Understanding and using hooks
        • Synchronization via Hooks
        • Modules, Classes and Controller Override
        • Modules, Override, Web Service
        • Db class good practices for Prestashop 1.4
        • Carrier modules - functions, creation and configuration
        • Creating your own payment module
        • Accelerated Security Course - Episode 1 - Never Trust Foreign Data
        • Accelerated Security Course - Episode 2 - SQL Injections
        • Accelerated Security Course - Episode 3 - XSS
        • Accelerated Security Course - Episode 4 - CSRF
      • Fundamentals
      • Creating a PrestaShop module
      • Development standard
      • Public and overloadable methods
      • Web-service reference
      • How to use the forge to contribute to PrestaShop
      • Rocky's guides
        • PrestaShop 1.4.3 Development Guide
          • Architecture
          • Overriding Files
          • Creating Modules
          • Cookie Structure
          • Database Structure
        • PrestaShop 1.4.3 Performance Guide
    • Designer Guide
      • Coding a theme
      • Design tips
      • Implementing layered navigation in a theme
    • Troubleshooting
    • FAQ
    • User contributions
    • Documentation PDFs
  • Documentation française 1.4
    • Guide de démarrage
    • Mettre à jour PrestaShop
    • Guide de l'utilisateur
      • Formation
      • Personnaliser votre boutique
      • Se connecter au back-office de Prestashop
      • Ajouter des produits et des catégories de produits
      • Un aperçu du catalogue
      • Gérer les clients
      • Gérer les commandes
      • Gérer les méthodes de paiement
      • Gérer le transport
      • Comprendre les statistiques
      • Gérer les modules
      • Gérer les employés
      • Comprendre les préférences
      • Explorer les outils de PrestaShop
      • Obtenir de l'aide
    • Guide de l'administrateur système
    • Guide du développeur
      • Fondamentaux
      • Créer un module PrestaShop
      • Tutoriels pour développeurs
        • Tutoriel Webservice REST
          • Chapitre 1 - Mise en place - Création des accès dans le Back Office
          • Chapitre 2 - Découverte - Tester l'accès au service web avec le navigateur
          • Chapitre 3 - Premiers pas - Accéder au service web et lister les clients
            • 3.1 Accéder au service web
            • 3.2 Gestion des erreurs
            • 3.3 Lister les clients
          • Chapitre 4 - Récuperer des données : Récupérer un client
          • Chapitre 5 - Modification : Mettre à jour un client
          • Chapitre 6 - Création : Formulaire d'ajout à distance
          • Chapitre 7 - Suppression : Retirer des comptes client de la base
          • Chapitre 8 – Utilisation avancée
          • Chapitre 9 - Gestion des images
          • Chapitre 10 - Gestion des prix
          • Mémento : Notions énoncées dans ce tutoriel
        • Mieux comprendre et utiliser les hooks
        • La synchronisation via les Hooks
        • Surcharge et override
        • Modules, surcharge, web service
        • Les bonnes pratiques de la classe Db sur Prestashop 1.4
        • Les modules transporteurs - fonctionnement, création, configuration
        • Cours de sécurité accéléré no. 1 - Never trust foreign data
        • Cours de sécurité accéléré no. 2 - Injections SQL
        • Cours de sécurité accéléré no. 3 - XSS
        • Cours de Sécurité accéléré no. 4 - CSRF
    • Guide du designer
      • Conseils en design
      • Créer un thème
    • Guide du Vendeur
    • Import Wiki FR
      • Dépannage
        • Changer la taille maximum de téléchargement de fichiers
        • Comment ajouter une page à PrestaShop
        • Générer le fichier .htaccess par Prestashop pour avoir des URLs simplifiées
        • Générer un nouveau mot de passe manuellement
        • Import CSV
        • Personnalisation des mails clients
        • Problème d'allocation mémoire chez 1&1
        • Problème pour se connecter après avoir effacé une langue
        • Votre site ne répond plus, une page blanche s’affiche
      • Fidéliser les Clients
      • Gestion des Taxes
      • Installer Un Module
      • Sauvegarder votre Base de Données
    • PDF de la documentation
    • Contributions des utilisateurs
    • Questions fréquentes
  • Documentación española 1.4
    • Introducción
    • Actualización de PrestaShop
    • Guía de Usuario
      • Entrenamiento
      • Personalización de su tienda
      • Exploración del front-office
      • Conexión al back-office PrestaShop
      • Añadir Productos y Categorías de Productos
      • Una Mirada Dentro del Catálogo
      • Gestión de Clientes
      • Gestión de Pedidos
      • Gestión de Métodos de Pago
      • Gestión de Envío
      • Comprensión de las Estadísticas
      • Gestión de Módulos
      • Gestión de Empleados
      • Comprensión de Preferencias
      • Exploración de las herramientas de PrestaShop
      • Soporte PrestaShop
    • Guía del Administrador del Sistema
    • Guía del Desarrollador
      • Aspectos Fundamentales
      • Creación de un módulo de PrestaShop
      • Estándares de desarrollo
      • Manuales de desarrollador
        • Utilización del servicio web REST
          • Capítulo 1 - Creación de Acceso al Back Office
          • Capítulo 2 - Descubrimiento - Pruebas de acceso al servicio web con el navegador
          • Capítulo 3 - Primeros pasos - Acceso al servicio Web y lista de clientes
            • 3.1 - Acceso al servicio web
            • 3.2 - Manejo de errores
            • 3.3 - Enumeración de clientes
          • Capítulo 4 - Recuperación de datos - Recuperación de un cliente
          • Capítulo 5 - Modificación - Actualización de cliente
          • Capítulo 6 - Creación - Formulario En Línea Remoto
          • Capítulo 7 - Eliminación - Eliminar cuentas de clientes de la base de datos
          • Capítulo 8 - Uso avanzado
        • Comprensión y uso de hooks
        • Sincronización a través de Hooks
        • Módulos, Reemplazo, Servicio Web
        • Módulos, Clases y Reemplazo del Controlador
        • Buenas prácticas de Clase DB para Prestashop 1.4
        • Módulos de transportistas - funciones, creación y configuración
        • Curso Acelerado de Seguridad - Episodio 1 - Nunca Confíe en Datos Exteriores
        • Curso Acelerado de Seguridad - Episodio 2 - Inyecciones SQL
        • Curso Acelerado de Seguridad - Episodio 3 - XSS
        • Curso Acelerado de Seguridad - Episodio 4 - CSRF
      • Referencia del servicio web
    • Guía de Diseñador
      • Codificación de un tema
      • Consejos de Diseño
    • Solución de problemas
    • Preguntas Frecuentes
Powered by GitBook
On this page
  • Introducción
  • Reemplazo de módulo
  • Reemplazo de clase
  • Ejemplo 1
  • Ejemplo 2
  • Ejemplo 3
  • Ejemplo 4
  • Conclusiones

Was this helpful?

  1. Documentación española 1.4
  2. Guía del Desarrollador
  3. Manuales de desarrollador

Módulos, Clases y Reemplazo del Controlador

PreviousMódulos, Reemplazo, Servicio WebNextBuenas prácticas de Clase DB para Prestashop 1.4

Last updated 4 years ago

Was this helpful?

Este artículo fue escrito por Julien Breux y fue publicado por primera vez el 10 de agosto de 2011, .

Introducción

PrestaShop le permite reemplazar diversos componentes y comportamientos. PrestaShop versión 1.4 consta de dos puntos principales:

  • El primero es reemplazar las partes visibles de los módulos (plantillas, JavaScript y lenguaje de hojas de estilo) para que los temas pueden adaptarse mejor a ellos.

  • El segundo es reemplazar el comportamiento del software (los archivos de clase y los archivos de controlador) para apuntar a una sección específica de los componentes necesarios.

Reemplazo de módulo

Los módulos se encuentran generalmente en el siguiente formato:

  • /modules/my_module/my_module.tpl

  • /modules/my_module/my_module.css

  • /modules/my_module/my_module.js

PrestaShop le permite reemplazar o sustituir ciertos archivos visibles del módulo por otros nuevos con el mismo tema. No podría ser más simple, haga lo siguiente:

  • /themes/prestashop/modules/my_module/my_module.tpl

  • /themes/prestashop/css/modules/my_modules/my_module.css

  • /themes/prestashop/js/modules/my_modules/my_module.js

Los nuevos archivos se utilizarán cuando muestre su sitio web.

Reemplazo de clase

Reemplazar es una forma de "suplantar" los archivos de clase y los archivos de controlador. La ingeniosa función de auto-carga de clase de PrestaShop, hace el "cambio" a otros archivos bastantes simples. Use la herencia para modificar y agregar nuevos comportamientos utilizando las diversas propiedades de clases y métodos.

Por lo general se construyen de la siguiente manera (ejemplo de producto):

  • /classes/Product.php Esta clase será denominada "ProductCore"

  • /controllers/ProductController.php Este controlador será denominado "ProductControllerCore"

Usted tendrá que crear un archivo en la carpeta "override/classes/" para "reemplazar" el modelo de clase resultante, tal como:

  • /override/classes/Product.php

Esta clase será denominada "producto" y se extiende la clase "ProductCore". ¡Sólo un movimiento de la varita mágica PrestaShop y el hechizo está funcionando!

También puede usar este principio con los controladores y el "reemplazo" de la siguiente manera:

  • /override/controllers/ProductController.php

Este controlador será denominado "ProductController" y extiende la clase "ProductControllerCore".

PrestaShop cuenta con ciertas carpetas que puede utilizar para reemplazar elementos tales como mostrar redireccioness (_Tools.php) y medir el tiempo de ejecución del hook (_Module.php) etc.

Ejemplo 1

Utilizando datos de clase MySQL.php es simplemente imposible tratar de introducir datos en una base de datos diferente a PrestaShop en el mismo servidor MySQL. (¡En serio!)

La solución es utilizar el siguiente reemplazo de la clase MySQLCore:

<?php
class MySQL extends MySQLCore
{
  public function __construct($server, $user, $password, $database, $newlink = false)
  {
    $this->_server = $server;
    $this->_user = $user;
    $this->_password = $password;
    $this->_type = _DB_TYPE_;
    $this->_database = $database;

    $this->connect($newlink);
  }

  public function connect($newlink = false)
  {
    if (!defined('_PS_DEBUG_SQL_'))
      define('_PS_DEBUG_SQL_', false);

    if ( $this->_link = mysql_connect($this->_server, $this->_user, $this->_password, $newlink) )
    {
      if(!$this->set_db($this->_database))
        die(Tools::displayError('The database selection cannot be made.'));
    }
    else
      die(Tools::displayError('Link to database cannot be established.'));

    /* UTF-8 support */
    if (!mysql_query('SET NAMES \'utf8\'', $this->_link))
      die(Tools::displayError('PrestaShop Fatal error: no utf-8 support. Please check your server configuration.'));
    // removed SET GLOBAL SQL_MODE : we can't do that (see PSCFI-1548)
    return $this->_link;
  }
}
?>

Para utilizarlo, debe crear una instancia de clase de la siguiente manera:

  • For local connection : new MySQL(DB_SERVER, DB_USER, DB_PASSWD, 'DB_name', true);

  • For remote connection : new MySQL(DB_SERVER, DB_USER, DB_PASSWD, 'DB_name', true);

El último parámetro obliga a la creación de una conexión MySQL.

Ejemplo 2

/*
 * This override allows you to use ajax-tab.php to make any admin action.
 * Use it for crontask for example
*/
class AdminTab extends AdminTabCore {
    public function ajaxProcess()
    {
        return $this->postProcess();
    }
}

Ejemplo 3

/*
 * Create a cron task to make periodical database backup
 * (please test before use, I didn't tested it yet)
*/
class AdminTab extends AdminTabCore{
    public function ajaxProcess()
    {
        // here we call the same thing as if we do the old way
        // + with "if" : maybe we want to limit its use to only adding backup :
        // note : find yourself a way to get the file link if you want to send it by mail !
        if (isset($_REQUEST['addbackup']))
            return $this->postProcess();
}

public function displayAjax()
{
    if (sizeof($this->_errors) > 0)
    {
        // handle errors
        // for example, send mail with all error msg
        $content = '';
        foreach($this->_errors as $errorMsg)
           $content .= $errorMsg;

           $lang =  Configuration::get('PS_LANG_DEFAULT');
           // here we send a mail to give the result of the process
           // notice : you have to create template mails files
           Mail::Send($lang, 'backuptaskdone', '[autobackup] report backup error', array('backup_link'=>)), $to);
    }
    else
    {
        // no error, but maybe we want a mail ?
        if(Configuration::get('PS_NOTICE_SUCCEED_BACKUP'))
        {
           // fileAttachment available, see 9th param of Send() method in classes/Mail.php
               // + we can add a condition "if(Configuration::get('PS_AUTOBACKUP_SEND_FILE'))"
           Mail::Send($lang, 'backuptaskerror', '[autobackup] report backup error', array('vars to use in tpl'), $to);
        }
    }
    return true;
}
}

Ejemplo 4

/*
 * with this override, you have a new Smarty variable "currentController"
 * available in header.tpl
 * This allows you to use a different header if you are
 * on a product page, category page or home.
 */
class FrontController extends FrontControllerCore{
  public function displayHeader()
  {
    self::$smarty->assign('currentController',get_class($this));
    return parent::displayHeader();
  }
}

Conclusiones

Los archivos del núcleo no son modificados al reemplazar. Esta técnica le permite personalizar su tienda PrestaShop y monitorear cómo evoluciona el software. Las actualizaciones están facilitadas.

en el blog PrestaShop