Overrider les fichiers PHP Prestashop

25 Mar

Voici une petite astuce pour overrider les fichiers Php des modules Prestashop, car à ma connaissance nous la structure de Prestashop permet d'overrider les fichiers JS, CSS et TPL mais pas les fichiers PHP.

Pour éviter cela, nous pouvons remplacer (overrider) la classe abstraite Module et plus précisément la méthode static getInstanceByName, qui permet en gros de créer une instance donc un objet du module en cherchant le fichier.php du module pour sa création.

Il suffit donc de rajouter une condition qui permet de tester si un fichier php existe bien dans le dossier de thème si oui et bien nous le prenons à la place du fichier d'origine.

Donc il faut copier le fichier Module.php se trouvant dans le dossier /classes/module/Module.php dans le dossier override/classes/module/Module.php et remplacer la méthode getInstanceByName.

public static function getInstanceByName($module_name)
{
    if (!Validate::isModuleName($module_name))
        die(Tools::displayError());
    if (!isset(self::$_INSTANCE[$module_name]))
    {
        if (Tools::file_exists_cache(_PS_MODULE_DIR_.$module_name.'/'.$module_name.'.php'))
        {
	    /*** DEBUT */
	    if (file_exists(_PS_THEME_DIR_.'modules/'.$module_name.'/'.$module_name.'.php'))
	    {
	        // include the file
		include_once(_PS_THEME_DIR_.'modules/'.$module_name.'/'.$module_name.'.php');
	    }
	    else
	    {
	        include_once(_PS_MODULE_DIR_.$module_name.'/'.$module_name.'.php');
	    }
	    /*** FIN */
		
	    if (class_exists($module_name, false))
	        return self::$_INSTANCE[$module_name] = new $module_name;
	}
	return false;
    }
    return self::$_INSTANCE[$module_name];
}

Voilà ça devrait fonctionner maintenant. Ce code a été testé sur la version Prestashop 1.5.3.
Il suffit désormais d'ajouter dans votre dossier de thème puis dans votre dossier du module que vous voulez modifier, le fichier PHP et faire les changements nécessaires.

Publié le: Lundi 25 mars 2013
blog comments powered by Disqus
Monter

© Circonflex-studio - Tous droits réservés - Mentions legales
Développeur web indépendant / Webdesigner / Intégrateur
Nice - Cannes - Monaco - Antibes - côte d'azur | site valide HTML 5

Ce site à été développé en Python avec le framework Django

"http://www.cssawards.net/nominee/circonflex-studio/"