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
  • Introduction
  • Surcharge des modules
  • Surcharge des classes
  • Exemple 1
  • Exemple 2
  • Exemple 3
  • Exemple 4
  • Conclusions

Was this helpful?

  1. Documentation française 1.4
  2. Guide du développeur
  3. Tutoriels pour développeurs

Surcharge et override

PreviousLa synchronisation via les HooksNextModules, surcharge, web service

Last updated 4 years ago

Was this helpful?

Cet article a été écrit par Julien Breux, et .

Introduction

PrestaShop vous permet de surcharger différents éléments et comportements. Il existe en réalité deux grands principes dans la version 1.4 de PrestaShop :

  • Le premier consiste à surcharger les éléments de vue des modules (Templates, JavaScript et feuilles de styles) afin que les thèmes puissent s'adapter au mieux à ceux-ci.

  • Le second principe consiste quant à lui à surcharger les comportements métiers (fichiers classes et fichiers contrôleurs) afin de ne cibler qu'une partie des éléments désirés.

Surcharge des modules

Les modules sont généralement constitués de cette façon :

  • /modules/mon_module/mon_module.tpl

  • /modules/mon_module/mon_module.css

  • /modules/mon_module/mon_module.js

PrestaShop vous permet de « surcharger », autrement dit de remplacer certains fichiers de vue des modules par de nouveaux situés dans le thème. Pour cela, rien de plus simple, il vous suffit de procéder de la manière suivante :

  • /themes/prestashop/modules/mon_module/mon_module.tpl

  • /themes/prestashop/css/modules/mon_modules/mon_module.css

  • /themes/prestashop/js/modules/mon_modules/mon_module.js

Ainsi, lorsque vous allez afficher votre site, ces nouveaux fichiers seront utilisés.

Surcharge des classes

L'override est un concept qui permet de "surcharger" les fichiers classes et les fichiers contrôleurs. L'utilisation ingénieuse de l'auto-chargement des classes de PrestaShop permet donc un "switch" assez facile de ces différents fichiers. Il vous est donc possible grâce à l'héritage de modifier ou ajouter de nouveaux comportements via les propriétés et les méthodes de ces différentes classes.

En temps normal, ceux-ci sont architecturés de cette façon (exemple pour la partie produit) :

  • /classes/Product.php Cette classe se nommera "ProductCore"

  • /controllers/ProductController.php Ce contrôleur se nommera "ProductControllerCore"

Afin de "surcharger" la classe modèle produit, vous devez créer un fichier situé dans le dossier "override/classes/" comme ceci :

  • /override/classes/Product.php

Cette classe se nommera "Product" et étendra la classe "ProductCore". Ainsi, la magie de PrestaShop peut opérer !

De la même façon, vous pouvez utiliser ce principe avec les contrôleurs et donc "surcharger" de cette façon :

  • /override/controllers/ProductController.php

Cette classe se nommera "ProductController" et étendra la classe "ProductControllerCore".

PrestaShop met à votre disposition certains fichiers vous permettant de mettre en œuvre quelques overrides comme l'affichage des redirections (_Tools.php), le calcul du temps d'exécution des "hooks" (_Module.php), etc...

Exemple 1

Lorsque l'on essaye de taper dans une base de données différente de celle de Presta, sur le même serveur MySQL, c'est simplement impossible avec la classe MySQL.php de base (et oui !).

La solution : utiliser cette surcharge de la classe 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;
	}
}
?>

Pour l'utiliser, il suffit juste d'instancier la classe de la manière suivante :

  • Pour une connexion locale : new MySQL(DB_SERVER, DB_USER, DB_PASSWD, 'le_nom_de_la_bdd', true);

  • Pour une connexion distante : new MySQL($ip_or_server, $user, $pass, $dbname, true);

Le dernier paramètre force la création d'une nouvelle connexion MySQL.

Exemple 2

Cette surcharge vous permet d’utiliser ajax-tab.php pour toute action d’administration.

A utiliser pour les taches cron par exemple.

/*
 * 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();
    }
}

Exemple 3

Créer une tache cron pour faire une sauvegarde périodique de la base de données. Merci de faire un test avant utilisation !

/*
 * 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;
}
}

Exemple 4

Avec cette surcharge, vous avez une nouvelle variable Smarty « currentController » disponible dans header.tpl Ceci vous permet d’utiliser un header différent selon que vous soyez sur une page produit, une page catégorie ou sur la home.

/*
 * 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();
  }
}

Conclusions

Avec la surcharge, les fichiers « core » ne sont pas modifiés. Cette technique vous permet donc de personnaliser votre boutique PrestaShop tout en ayant la possibilité de suivre l'évolution du logiciel. Les mises à jour en sont facilitées

publié sur le blog de PrestaShop le 9 août 2011