Jump to content

est il possible d'ajouter un nouveau hook à un module existant?


Recommended Posts

Bonjour,

 

J'ai eu des problèmes avec les overrides mais c'était largement du au fait que la réinitialisation du module n'avait pas été faite.

 

Sauf erreur de ma part lors de l'installation ou la ré initialisation du module, prestashop recopie les override vers le dossier override/classes ou override/controllers à la racine du site.

 

Pour les hook ils doivent être 'enregistré' par registerHook, là aussi une réinitialisation s'impose ou un appel à registerHook.

Link to comment
Share on other sites

Bonjour math_php!

 

Merci pour ton feedback.

Je viens de regarder de plus près le code de la classe Module.php. En PS 1.5.3.1, durant l'installation d'un module, la méthode installOverrides est appelée.

 

public function installOverrides()
{
 if (!is_dir($this->getLocalPath().'override'))
  return true;
 $result = true;
 foreach (Tools::scandir($this->getLocalPath().'override', 'php', '', true) as $file)
 {
  $class = basename($file, '.php');
  if (Autoload::getInstance()->getClassPath($class.'Core') )
$result &= $this->addOverride($class);
 }
 return $result;
}

 

Celle-ci regarde dans

$this->getLocalPath().'override'

si il n'y a pas un fichier php. Disons qu'ici, j'essaie de surcharger la classe BlockPaymentLogo. Le getLocalPath donne: \modules\blockpaymentlogo\.

Ensuite on obtient le nom de la classe en enlevant le .php. Dans mon cas, class=blockpaymentlogo. Ensuite on checke si le classpath (basé sur $class auquel on concatène 'Core') existe (enfin je pense que c'est ce que cela veut dire). Dans mon cas, c'est pas le cas ... parce que le class path ne finit pas par Core.(toujours si j'ai bien compris) ....

 

D'après ce que je vois dans les fichiers classes pour les modules + la doc pour écrire un module, le nom de la classe pour un module ne contient jamais 'Core'. Donc je ne comprends pas vraiment le test exécuter .... Une idée?

Edited by be_tnt (see edit history)
Link to comment
Share on other sites

A mon avis cette fonction permet plutot de deployer les overrides des classes et des controllers qui seraient nécessaires au bon fonctionnement du module.

 

Pour faire ce que tu demandes, il faut :

1- modifier le module et y ajouter la fonction hookNomDuNouveauHook

2- associer le module à ce hook dans l'onglet des positions

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...