Exemple d’override pour Prestashop
Ce message se veut être un complément au billet de Webbax
J’ai eu à travailler sur l’override de Prestashop. Ce n’est pas compliqué, en tout cas beaucoup plus simple que de modifier les fichiers “coeurs” de Prestashop et si c’est bien fait beaucoup plus stable.
Le but était de rajouter trois Hooks génériques : un pour l’ajout d’un Objet (produit, fabriquant, bon de réduction…), un pour sa mise à jour et un pour sa suppression.
Dans les versions 1.3 et précédentes j’aurais dû modifier le fichier classes/ObjectModel.php qui est un peu complexe et faire une version pour chaque version de Prestashop.
Mais là que du bonheur, il faut créer un fichier override/classes/ObjectModel.php comme ci-dessous :
class ObjectModel extends ObjectModelCore
{
public function add($autodate = true, $nullValues = false)
{
$result = parent::add($autodate, $nullValues);
if ($result) Module::hookExec('objectAdd', array('object' => $this));
return $result;
}
public function update($autodate = true, $nullValues = false)
{
$result = parent::update($autodate, $nullValues);
if ($result) Module::hookExec('objectUpdate', array('object' => $this));
return $result;
}
public function delete($autodate = true, $nullValues = false)
{
$result = parent::delete($autodate, $nullValues);
if ($result) Module::hookExec('objectDelete', array('object' => $this));
return $result;
}
}
C’est petit hein ?
Le principe est simple, pour chaque méthode (add(), update() et delete() ), on laisse l’objet parent faire son travail ( parent::add() ) et en fonction du résultat on appelle ou non le hook.
Ainsi on a pas touché au coeur de Prestashop, le fichier ajouté est simple et facile à maintenir et surtout il sera compatible avec les futures version de Prestashop.
Détecter un module apache avec PHP
Utile pour détecter le mod_evasive par exemple.
/**
* return true if the module $name is activated in apache
*
* @param string $name module name
* @return boolean
* @author Samdha
**/
function detect_apache_mod($name) {
$save = ob_get_clean();
ob_start();
phpinfo();
$phpinfo = ob_get_clean();
if ($save !== false) {
ob_start();
echo $save;
}
return (strpos($phpinfo, $name) !== false);
}
if (detect_apache_mod('mod_evasive')) sleep(1);
Utilisé dans le module Prestashop de mise à jour facile