Jump to content

[Résolu] Changer le hook d'un module


Recommended Posts

Bonjour,
J'ai lu le tutoriel, concernant la création de nouveaux modules, mais je ne comprends pas dans quel hook sera placé un module, dans le cas ou l'on définit plusieurs fonctions hook.
Si je prend l'exemple du module blocksearch.php, il possède les fonctions :
- hookLeftColumn
- hookRightColumn
- hookTop

Dans le BO, je ne trouve pas comment affecter ce module dans le hook de mon choix, il est toujours dans top.

dans différents modules, on trouve plusieurs fonctions hook, mais comment configurer le hook du module via le BO. J'ai désinstallé et réinstallé les modules, je n'ai pas vu de choix.
Comment mettre le module blocksearch, dans rightCcolumn ? peut-on le faire par le BO ?

Link to comment
Share on other sites

J'ai perdu quelques heures à chercher la solution avant de trouver dans le code .php :

        //return $this->registerHook('leftColumn');
       //return $this->registerHook('rightColumn');
       return $this->registerHook('top');

Link to comment
Share on other sites

pas tout à fait résolu,

Lorsque je met mon module dans racine_prestashop/modules, il apparait automatiquement dans le BO,
mais si je le met dans /racine_prestashop/themes/mon_theme/modules, il n'est pas affiché bar le BO, et je ne peux pas l'installer
Est-ce que ce fonctionnement est prévu ?

En regardant le code de module::display, je vois que le module est recherché d'abord dans le répertoire theme/modules, et ensuite dans le repertoire modules directement sous la racine.

Link to comment
Share on other sites

En regardant le code de module::display, je vois que le module est recherché d’abord dans le répertoire theme/modules, et ensuite dans le répertoire modules directement sous la racine.


Effectivement, comme le dis Zendik, c'est le fichier du THEME qui est cherché en priorité dans /racine_prestashop/themes/mon_theme/modules/nomdumodule/. Ceci permet de personnaliser l'aspect des modules en fonction du thème de la boutique. Il n'y auras donc dans ce dossier que des fichiers .tpl

Pour donner un peu plus de précision sur le fonctionnent des hook avec les modules, il faut juste remarquer qu'un module s'inscrit automatiquement lors de son installation dans les hooks (ce qui correspond aux lignes citées dans le second poste de reinette), et ces positions peuvent être ensuite modifiés via l'outils position.
Pour ce qui est de l'affichage dans le frontoffice, smarty va regarder lorsqu'il rencontre un hook ({HOOK_TOP}, par exemple) quels sont les modules inscrit sur ce hook, puis va appeler la fonction hookNomDuHook (hookTop dans l'exemple) SI ELLE EST PRESENTE, pour chacun de ces modules.

C'est pourquoi il est impossible d'afficher certains blocs dans certains hooks, sans ajouter ces fonctions dans le code du bloc, mais qu'il est possible d'afficher le blocksearch dans les colonnes de gauche et/ou droite.
Link to comment
Share on other sites

En mettant, mon module dans racine/themes/mon theme/modules/mon module je devrais le voir apparaitre automatiquement dans la liste blocks des modules à installer du back office, est-ce bien ce qui devrait se passer ?

puisque dans la fonction _construct(), j'ai la ligne

$this->tab = 'Blocks';



et s'il n'y est pas c'est que j'ai une erreur quelque part ? car tant qu'il n'apparait pas je ne peux pas l'installer et faire exécuter la fonction install.

Pour l'instant, il n'apparait pas alors qu'il fonctionnait en étant dans le dossier racine/modules.

Link to comment
Share on other sites

C'est normal que ma solution ne marche pas.
Je souhaitais mettre mes modules personnels entiers dans le dossier /themes, mais cela ne fonctionne pas ainsi.
On ne peut pas y mettre le fichier .php, apparemment ce fichier doit obligatoirement se trouver dan le dossier racine/modules. (voir la fonction module::getInstanceByName)

Ce qui m'oblige éventuellement à scinder mon dossier, et à mélanger mes fichiers et ceux de la distribution.
Existe-il une solution pour avoir toutes les modifications dans un seul dossier à part genre pluggin ?
Est-ce prévu dans la 1.2?

Link to comment
Share on other sites

et bien, dans le dossier du module contenu dans /themes/ton theme/, il est normal de n'avoir que les TPL. Comme tu l'as signalé dans le message précédent, la liste des modules est générée en regardant les dossiers contenu dans /modules/.

C'est uniquement dans l'affichage du site que le créateur d'un template peu ecraser le .tpl contenu dans /modules/lemodule/ en en plaçant un du même nom dans /themes/letheme/modules/lemodule/.


Il convient donc, si tu souhaites créer un module et le proposer, de mettre les fichiers .tpl dans /modules/tonmodule/, afin de laisser aux créateurs de templates (et aux utilisateurs) la possibilité "d'écraser" ce fichier .tpl pour leurs personnalisations.

Inutile donc de t'embêter à créer deux dossiers, prestashop va chercher les .tpl en priorité dans /themes/lethemecourant/modules/lemodule, mais prendra celui contenu à coté du .php correspondant s'il n'est pas présent dans le theme.

Link to comment
Share on other sites

J'ai pris ce module en exemple, et pour comprendre son fonctionnement, pour pouvoir mettre au point mon module, une barre de navigation toute simple, et facile à configurer. En particulier le positionnement dans un hook me posait problème, c'est résolu.
Je pense qu'il serait intéressant de pouvoir rassembler toutes les modifications qui ne font pas partie de la distribution PS dans un seul dossier, plutôt que de les mettre dans le dossier modules, juste pour des raisons pratiques.

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...