bigxavi Posted March 22, 2017 Share Posted March 22, 2017 Bonjour, Je suis tout nouveau sur prestashop et cela fait quelques jours que j'essais de bien comprendre l'architecture de ce CMS. J'ai compris les principes fondamentaux mais je n'ai pas trouvé d'exemple concret et complet sur le fonctionnement et la création d'un hook. Connaissez-vous un thread complet traitant de ce sujet? (V1.6) Par ailleurs j'essais actuellement de rajouter un lien dans le header de mon site, vous savez juste à côté de "nous contacter" et "connexion" mais je ne trouve pas le module blockpermanentlink dans la copie du theme "default-boostrap". Comment puis-je faire cela simplement dans le code? Enfin et cela pourra peut être faire l'objet d'un autre thread, mais comment fait on pour customizer les css existant? Faut-il les overrider quelque part ou bien modifier directeent le global.css par exemple? Je sais que cela fait beaucoup de questions et je vous remercie par avance. Je suis à votre disposition si avez besoin d'un complément d'information. Merci Link to comment Share on other sites More sharing options...
SaphyraK Posted April 7, 2017 Share Posted April 7, 2017 Salutation bigxavi, PrestaShop (1.6.x) stocke ses hooks (points d'accroche) dans la table ps_hooks de la base de données.Soit tu ajoutes un hook à la main dans cette table (essayes de ne pas créer de conflits)Soit tu passe par les méthodes de PrestaShop pour créer le hook à ta place.Je vais te donner la méthode la plus rapide: passer par PrestaShop (et de ce fait éviter tout les conflits!) -- Pour créer des hooks dans ton Module. Le fichier .PHP 1) Dans la méthode install() de ton module ajoute la déclaration de la création d'un Hook comme ça:Note bien la minuscule au début du nom du hook. C'est important pour la convention de nommage PrestaShop. $this->registerHook('nomDuHook'); Il apparaîtra alors dans la base de données (table ps_hooks). Mais aussi dans l'administration: "Modules & Positions" -> "Positions".Et là tu pourras l'associer (le nouveau Hook) à ton module.2) Pour t'en servir, toujours au travers de ton module: Ajoute la méthode correspondant au nom du Hook. public function hookNomDuHook() { // on créé une variable qui va contenir une chose récupérée de la table ps_configuration de PrestaShop. // on utilisera la méthode Configuration::get pour ça. // mais libre à toi de définir toi même ce que tu veux comme variables/traitements AVANT de rendre le tout via Smarty. // concernant le LONG NOM à RALLONGE... de ma variable, tu peux faire comme tu veux. Mais moi j'aime quand les choses sont claires. $saphyrak_variable_version_de_prestashop = "Version de PrestaShop: " . Configuration::get('PS_INSTALL_VERSION'); // on donne à Smarty la possibilité de récupérer cette variable, via le nom de variable au format Smarty: saphyrak_variable_version_de_prestashop $this->context->smarty->assign('saphyrak_variable_version_de_prestashop', $saphyrak_variable_version_de_prestashop); // on charge et on retourne son fichier de template ! return $this->display(__FILE__, 'tapagemodule.tpl', $this->getCacheId()); } Le fichier TPL:1) on va faire simple, on va vérifier si la variable qu'on a spécifié dans notre Hook existe, et si oui, on affiche un nouveau bloc ! {if $saphyrak_variable_version_de_prestashop != ''} <div id="nomdetonmodule" class="nomdetaclassecss"> <!-- Et tu affiche le contenu de ta variable comme ceci --> {$saphyrak_variable_version_de_prestashop|escape:'html':'UTF-8'} </div> {/if} Dans mon exemple, on assume que tu initiales le module à partir de son hookHeader() car c'est le seul Hook pouvant manipuler les balises <head> et </head> de ta page rendue par Smarty.Si tu n'utilises pas hookHeader() ou que tu charges les CSS différemment..Dans la page TPL où tu veux inclure le Hook tu devras lui spécifier justement d'utiliser ton Hook à un emplacement précis.Prenons par exemple la page du thème par défaut (theme-bootstrap): theme/theme-bootstrap/footer.tplPour y dire que c'est là que tu veux que LA PAGE TPL DE TON MODULE (tapagemodule.tpl) y soit affiché (ainsi que son contenu donc!)Tu n'auras qu'à écrire cette ligne de plus à l'endroit voulu dans footer.tpl: // note bien la minuscule au début du nom !! Important pour la convention de nommage PrestaShop. {Hook::exec('nomDuHook')} Et voilà, ton hook est opérationnel ! NOTE:Si tu passes par la base de données pour ajouter ton hook, tu n'auras même pas besoin de module.Mais de fait, tu ne pourras pas créer de "dynamisme via PHP", si le hook ne doit traiter que des informations non-dynamique ça va, sinon, c'est pas bien. Je réponds à tes autres questions dans un autre post. Link to comment Share on other sites More sharing options...
SaphyraK Posted April 7, 2017 Share Posted April 7, 2017 (edited) Comme je l'ai dis plus, haut, voici la réponse à tes autres questions.Déjà...Je te recommande de dupliquer le thème default-bootstrap (via l'administration) et d'utiliser uniquement ta version dupliquée.(pourquoi? Disons.. penses aux mises à jours qui vont empiéter sur le thème par défaut et le remettre à son état initial.....)Bien que mon exemple va utiliser default-bootstrap (car tu n'as qu'un thème dans ton installation pour l'instant).. Ensuite. Ajouter des liens au module blockpermanentlinks ** avant tout, tu sais que depuis le backOffice tu peux en allant dans "Modules et Services" configurer chaque modules séparément.** utilise le bouton-liste, le module blockpermanentlinks en fait partie, mais là, ça relève pas du développement mais de l'utilisation du backOffice (ce que la doc PrestaShop explique très bien). Pour le module "blockpermanentlinks" tu sais que tu peux pour n'importe quel module supportant les views overrider son template, CSS, JS, Traductions et Images.Cela pour n'importe quel thème.Le PHP n'est pas facilement overrideable, donc évites...C'est très facile,Déjà, il faut savoir que le module "blockpermanentlinks" se trouve dans le dossier: "modules/blockpermanentlinks" à la racine de ton installation PrestaShop !(celui (qui est parfois) dans le thème, n'est qu'un override des templates/css/js/traductions/images)Donc, tu vas dans ton dossier "modules/blockpermanentlinks" et tu y récupères les fichiers dossiers: /img /translations blockpermanentlinks-footer.tpl blockpermanentlinks-header.tpl blockpermanentlinks.css blockpermanentlinks.tpl Une fois ces fichiers et dossiers (ainsi que leur contenu) récupérés, tu les places vers les dossiers adéquats dans ton thème (default-bootstrap).Toutefois, chaque fichiers et dossiers ont leur importance.Et si des chemins n'existent pas, tu devras les créer.Ainsi, tu places tes fichiers et dossiers récupérés comme cela, pour respecter la logique de PrestaShop: /img vers: /themes/default-bootstrap /translations blockpermanentlinks-footer.tpl blockpermanentlinks-header.tpl blockpermanentlinks.tpl vers: /themes/default-bootstrap/modules/blockpermanentlinks blockpermanentlinks.css vers: /themes/default-bootstrap/css/modules/blockpermanentlinks Et maintenant, il ne te reste plus qu'à modifier ces nouveaux fichiers dans le thème où tu les as placés.Tu pourras donc y éditer les TPL pour ajouter tes nouveaux liens.Par contre n'oublies pas, si tu veux modifier le comportement du code PHP du module, tu devras le modifier dans son dossier original, pas dans le dossier du thème.Et si tu met à jour le module, n'oublies pas que tes changements apportés au code PHP du module ne sera JAMAIS gardé (à toi de refaire les mêmes changements après une maj, le mieux c'est d'avoir des backups et des patchs maisons déjà prêt avant une mise à jour!) Pour customizer (personnaliser) les css existants: Dans ton dossier /css du thème, tu as la possibilité de modifier TOUT les CSS qui ne font pas partis de modules. Dans ton dossier /css/modules/nomdumodulequetuveuxmodifier/ du thème, tu as la possibilité de modifier TOUT les CSS qui sont initialisés par modules. Pour overrider les css existants: La section "Ajouter des liens au module blockpermanentlinks" de mon post t'explique exactement le procédé !(avec comme exemple le module blockpermanentlinks) (n'oublies pas de faire ce travail sur le THEME QUI SERA LE TIEN (celui dupliqué comme expliqué plus haut) pour éviter les mauvaises surprises !) Merci de ta lecture, bon courage, et de rien !EDIT: Retrait du smiley qui s'est incrusté dans mon post, méchant smiley, méchant ! Edited April 7, 2017 by SaphyraK (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now