Jump to content

Module affichable en page centrale ? création d’un hook ?


Recommended Posts

Bonjour,

J’ai développé un Store Locator, qui doit s’afficher dans la page centrale.

Je voulais le faire sous forme d’un module, mais je n’ai pas trouvé de hook pour la page centrale.

=> Je me suis calé sur la fonctionnalité “supplier” et j’ai fait pareil :
J’ai donc la structure suivante :

/storelocator.php
/classes/StoreLocator.php
/themes/prestashop/storelocator.tpl

Existait-il un moyen de faire tout cela sous la forme de module, bien regroupé dans un sous répertoire de /modules ?
Parce que là, même si tout est bien rangé à sa place, c’est un peu dispersé.

Merci d’avance.

Link to comment
Share on other sites

J'ai créé une page, qui s'affiche en page centrale, mais pas sur la page d'accueil.

c'est une page indépendante, qui permet de localiser un magasin proche de chez soi.

Le problème est que j'aurais voulu que tout son code soit contenu dans un module, mais les modules étant rattachés aux hooks, ils peuvent juste s'afficher dans les colonnes de droite ou de gauche ou dans le header ou le footer, ou encore être rattachés à un événement.

Je me demandais si, pour encapsuler mon code dans un module, je devais créer un hook spécialement pour son appel.

Link to comment
Share on other sites

  • 4 months later...

Bonjour Blasto et
[email protected]
,

Avez vous réussi à intégrer ce module comme tdécris plus haut, si oui, puis-je en savoir plus ?
Je cherche actuellement à faire une chose assez similaire avec le module geolocalisationFR et la table supplier.

L'idée est de permettre à mes clients de localiser les points de retraits sur une carte dynamique

Link to comment
Share on other sites

Bonsoir,

Je reviens sur le Hook, 2 nuits de recherches, 1 site test planté, et la seule soluce trouvé est l'affichage dans un CMS de la carte.... Ch'suis loin du compte...

Mon CMS tient la route, question ? Mais comment marche un Hook ?
Est ce un point d'encrage...

Link to comment
Share on other sites

Bonjour.

Alors :D


Un hook est effectivement un point d'ancrage. Et il en existe pas pour la page centrale, tout simplement pasque la page centrale EST le .php contenu sur le site (sinon, toute la navigation se ferrait sur index.php, et ça serait quand même dommage pour la lisibilité et les fonctionnalités.)

Maintenant, il est possible d'ajouter dans une page .php de contenu, un hook créé de toute pièce.

Voici les 5 étapes permettant d'afficher "Hello World!" par exemple, sur la page supplier.php, puisqu'on parle d'elle.


On va donc créer le hook hookHelloWorld et s'inscrire dessus pour générer de l'affichage.

1 - Créer un hook au niveau de la base de données.
Allez dans votre gestionnaire sql préféré, et allez dans la table ps_hook, et ajouter la ligne suivante manuellement:

INSERT INTO `ps_hook` (`name`, `title`, `description`, `position`) VALUES ('helloWorld', 'Hello World', '', '1');



Vous pouvez bien entendu vous servir de votre interface utilisateur pour insérer cette ligne dans ps_hook.

2 - Préciser à Smarty (le gestionnaire de template) qu'il y a du contenu à générer pour le hook helloWorld dans supplier.php
Allez dans supplier.php (ou le fichier.php de votre choix) et au debut du fichier, mais APRES les lignes suivantes surtout:

include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/init.php');


Ajoutez la commande qui dicte à smarty d'aller chercher les inscriptions des modules au hook helloWorld et de générer l'affichage résultant dans la variable HOOK_HELLOWORLD. Il s'agit de la commande suivante:

$smarty->assign('HOOK_HELLOWORLD', Module::hookExec('helloWorld'));



3 - Définir où sera affiché le contenu généré du hook helloWorld.
Ceci consiste à placer la variable HOOK_HELLOWORLD dans le fichier template de supplier.php, qui se trouve dans /themes/votretheme/supplier.tpl
faites attention au conditions d'affichages inscrites dans le fichier, et placez, quelque part, ceci :

{$HOOK_HELLOWORLD}



4 - Inscrire le module de votre choix au hook helloWorld:
Allez chercher le fichier .php de votre module (geolocalisationFR dans votre cas) et localisez la fonction install()
Insérez-y ceci:

if (!$this->registerHook('helloWorld'))
           return false;


Mettez ceci APRES la référence à parent::install, sinon l'installation sera un échec.

5 - Enfin, votre module doit possédez la fonction hookHelloWorld($params) qui renvoi l'affichage.
Dans mon cas, je me contenterais d'ajouter dans le module :

function hookHelloWorld($params) {
   return 'Hello World!';
}


Mais adaptez cette fonction à votre envie (vous pouvez même appeler une autre fonction hookNomDuHook) si elle existe dèjà, de la manière suivante :

function hookHelloWorld($params) {
   return $this->hookNomDuHook($params);
}




Voila, j'espère avoir été clair et utile ^^

Bon courage !

Link to comment
Share on other sites

Merci SotEW,

Je test ce soir,

A première lecture, je comprends mieux le plantage de mon site test... Nul part je n'avais utilisé le code $smarty.

Donc, ceci explique celà.

J'espère mettre mon site en Prod fin de semaine prochaine... Merci à tous les dev et leurs super contrib.

SotEW, ton module pour installer des blocks est canon

Link to comment
Share on other sites

Question subsidiaire,

Si qqn a déjà modifier la page supplier en admin afin de pouvoir attribuer des adresses aux fournisseurs, je suis preneur.
Je cherche à dupliquer la page Admin de manufacturer pour que supplier ait le même comportement...

Est-ce le plus simple ? Ou devrais carrément créer une table ps_adress-supplier et l'alimenter via mon Admin modifier.

Je m'explique : la table ps_adress à un champ id_supplier mais pas de requète en Admin. Le module statsgeolocalisationFR interroge cette table pour afficher les clients, mais je souhaite le transformer pour qu'il affiche les supplier. Lors de mon dernier test, malgrés le changement d'id, j'appelle id_suppiler au lieu de id_customer, j'ai constaté que c'était toutes les adresse de la base ps_adress qui s'affichaient et pas seulement les 3 id_supplier test que j'avais créé via Phpmyadmin.

Faut-il prioriser une clé genre id_supplier pour n'afficher que les adress de cette table ou insérer une ligne genre exclure 1 et 2 (customer et manufacturer) pour ne garder que les 3...

Merci pour vos conseils éclairés, j'espère poster ma soluce très prochainement car ce module pourrait en interressé plus d'un.

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