Toutes les clefs pour réussir dans le e-commerce

Mes modules Prestashop

Modifier le hook d’un module sous Prestashop

Déplacer des modules est particulièrement simple dans le back-office de Prestashop. Toute fois, il est possible que vous obtenniez le message d’erreur suivant: “Ce module ne peut être accroché à ce hook”.
Cela signifie que le module n’est pas prévu pour être positionné là où vous le demandez. Ce qui ne veux pas dire que c’est impossible. Voici comment faire.

Je vais prendre l’exemple du mobule “bloc newsletter” mais le principe est le même pour tout les modules.
Le but ici est de permettre à ce module de se greffer dans le footer de notre site.

– Ouvrez le fichier /modules/blocknewsletter/blocknewsletter.php et repérez la fonction “install”



public function install()
{
if (parent::install() == false OR $this->registerHook('leftColumn') == false OR $this->registerHook('header') == false)
return false;
return Db::getInstance()->Execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'newsletter` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`newsletter_date_add` DATETIME NULL,
`ip_registration_newsletter` varchar(15) NOT NULL,
`http_referer` VARCHAR(255) NULL,
PRIMARY KEY(`id`)
) ENGINE='._MYSQL_ENGINE_.' default CHARSET=utf8');
}


Modifiez la parenthèse du if en ajoutant un hook supplémentaire comme ceci:



if (parent::install() == false OR $this->registerHook('leftColumn') == false OR $this->registerHook('header') == false OR $this->registerHook('footer') == false)

footer‘ correspond au nom technique de mon emplacement. Vous pouvez trouver les noms de chaque emplacement dans la partie “position” de l’onglet “module” dans le backoffice.

Il faut ensuite, toujours dans le même fichier, ajouter une fonction d’accroche qui va s’appeler “hookFooter” (vu que c’est sur le footer que l’on veut l’accrocher)



function hookFooter($params)
{
return $this->hookLeftColumn($params);
}


Ici on ne se fatigue pas trop on demande simplement à réutiliser la fonction hookLeftColumn qui est une fonction déjà définie dans notre classe. Selon le module que vous modifiez le nom de la fonction peut changer. Tout dépend du point d’accroche sur lequel votre module se greffe par défaut.

Désormais si vous allez dans la gestion des positions des modules vous pourrez greffer le bloc newsletter à votre footer.

Poster un Commentaire

13 Commentaires sur "Modifier le hook d’un module sous Prestashop"

Recevoir un email pour
avatar
Trier par:   plus récent | plus vieux | Plus de vote
Sadiki abdellatif
Invité
Sadiki abdellatif

Je te remerci infiniment :)

Styne
Invité
Styne

Merci pour ce poste.
Cependant une question me vient, quelles sont les riques pour les mises à jour de la solution avec une telle pratique ?
Merci

titchagcreation
Invité

Attention, les deux solutions proposées comportent un risque. Premièrement et comme dit ci-dessus, s’il y a une mise à jour qui touche à ce module, on perd notre modif.
Deuxièmement, dupliquer le module est tout aussi risqué si ce n’est plus. Si vous désinstallez le module d’origine (en effet pourquoi en garder 2?), les tables de la BDD seront supprimés et du coup le module copié ne fonctionnera plus.

Pour une solution plus propre, je vous conseille une discussion sur le forum de PS : http://www.prestashop.com/forums/topic/119286-surcharge-fichiers-dun-module/page__p__113352

Aldea
Invité
Aldea

Cela me va parfaitement merci :)

Simon
Invité
Simon

Super ! Merci beaucoup

Simon
Invité
Simon

Petite up sur la version 1.5

Le code s’écrit comme ceci :

public function hookDisplayfooter($params)
{
return $this->hookDisplayLeftColumn($params);
}

Dans le cas contraire, on se mange une page blanche

Marc
Invité
Marc

Bonjour à tous

@Simon en effet on se mange une page blanche Y’a t’il une solution ?? Merci pour le partage. Amitiés

Carole
Invité

Bonjour,
Je suis en version prestashop 1.5.3 et surtout débutante.
J’ai suivi le topic minutieusement mais j’arrive à une page blanche.
Comme le dit Simon il faut modifier le code pour la version 1.5
Je patauge complètement.
Pouvez-vous me dire ou je dois mettre ce code précisemment.
Pour info : je souhaite greffer mon module “date de livraison” en dessous de la quantité de ma fiche produit.
Merci par avance de votre aide.

wpDiscuz