Jump to content

Création module, ajout de hook, ...


Recommended Posts

Bonsoir,

 

j'ai des besoins de créer un module tout simple pour de l'affichage html dans un premier temps (j'aimerais intégrer de l'upload d'image par la suite mais ce n'est pas essentiel).

 

Je n'arrive pas à "joindre" le css au module, je me suis basé sur un canvas de module pour PS 1.5

trouvé ici : http://www.prestashop.com/forums/topic/188181-doc-canvas-de-module/

 

Comment faire dans PS 1.5 pour créer des modules simples, et de manière propre ?

 

De plus, je souhaiterais greffer le module panier sur un hook que je voudrais créer, mais j'ai l'impression que l'ancienne m"thode ne fonctionne plus... Des avis sur la question ?

 

J'ai vraiment du mal a trouver des docs fiables pour PS 1.5... je suis un peu perdu sur les méthodes pour la création de modules et leurs implémentations...

 

En vous remerciant par avance !

Link to comment
Share on other sites

Pour ce qui est d'ajouter du CSS, cela se passe dans le hook "displayHeader" via ce bout de code exemple:
 $this->context->controller->addCSS(($this->_path).'views/css/moncss.css', 'all'); 

 

Ok merci, ça fonctionne, je m'y était mal pris au début...

Par contre tu me dis HookDisplayHeader mais ce n'est pas forcément dans ce hook ? En l'occurrence je l'ai mis dans HookDisplayHome, totu dépend d'où est greffé le module, non ?

 

 

Et pour la création de hook, y-a-t-il une manipulation particulière ?

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

En réalité, il est tout à fait possible de le mettre dans n'importe quel hook (display, pas d'actions). Cependant, il est vivement conseillé/recommandé/(obligatoire) de le mettre dans le hook displayHeader pour la simple et bonne raison qu'ainsi, le CSS sera placé comme il a lieu d'être: dans la balise <head></head> ; à contrario, il sera placé n'importe où dans la balise <body></body>.

 

La création de hooks ? C'est à dire avoir un hook qui n'est pas encore répertorié ?

Link to comment
Share on other sites

Dans le fichier php de mon module j'ai donc intégré le css de cette façon :

 

 

public function hookDisplayHeader($params)
{
  $this->context->controller->addCSS(($this->_path).'views/css/mon_module.css', 'all');
}

 

Cependant il n'est pas pris en compte contrairement à cela ou je l'ai mis dans le DisplayHome :

 

public function hookDisplayHome($params)
{
global $smarty;
$this->context->controller->addCSS(($this->_path).'views/css/mon_module.css', 'all');
return $this->display(__FILE__, 'views/templates/front/mon_module.tpl');
}

 

Pourquoi ? est-ce une manière parmis tant d'autre ? Est-ce une façon de le faire proprement ?

 

Concernant la création d'un hook, pour faire simple j'ai une div top_header et une div header et je souhaiterai greffer le panier dans le top_header. J'imagine pouvoir créer un hook top_header par exemple afin d'y greffer le panier, je me trompe ?

 

 

En fait, j'essaye vraiment de comprendre le fonctionnement de Prestashop, mais plus j'avance plus j'ai l'impression de ne rien comprendre....

Link to comment
Share on other sites

Pour revenir sur la création de hook; j'ai réussi à créer un hook topheader en l'insérant dans la base, puis j'ai modifié le userinfo.php

avant

 

public function install()
{
 return (parent::install() AND $this->registerHook('top') AND $this->registerHook('header'));
}
............
............
............
public function hookTop($params)
{
 if (!$this->active)
  return;
 $this->smarty->assign(arr.........

 

Après

 

 

public function install()
{
 return (parent::install() AND $this->registerHook('topheader') AND $this->registerHook('header'));
}
............
............
............
public function hookTopheader($params)
{
 if (!$this->active)
  return;
 $this->smarty->assign(arr.........

 

Mais j'ai toujours une erreur qui s'affiche :

Notice: Undefined index: HOOK_TOPHEADER in W:\wamp\sites\mon_site\cache\smarty\compile\17a7c74755b3bc9303630648e47f449ea863e669.file.header.tpl.php on line 153

 

Je n'arrive pas à voir d'où cela peut provenir... une idée ?

Link to comment
Share on other sites

Ok merci cela fonctionne j'ai du rajouter également la partie suivante pour que cela fonctionne dans la surcharge du frontcontroller :

 

public function initContent()
{
...............
	  }

 

Petite question :

 

J'ai vu dans le frontcontroller plusieurs fois ces commentaires :

 

// This method will be removed in 1.6

 

ou

 

/**
 * @deprecated 1.5.0
 */
public function displayHeader($display = true)
{

 

A quoi cela correspond ? Les fonctions sont dépréciées pour la version 1.5 ?

Link to comment
Share on other sites

  • 2 weeks later...

Salut,

 

Comme l'explique J.Danse dans sont article paru chez phpsolution l'ajout de hook est désormais automatique, il suffit de faire :

 

$this->registerHook('tonHook')

 

pour que celui-ci soit créé dans la base de données, ensuite comme avant il faut créer une méthode hookTonHook() dans la classe principale de ton module, de là tu peut faire tout les traitement que tu veut comme avant.

 

Niveau tpl il faut ajouter le code suivant

{hook h='tonHook'}

 

ou si tu souhaite assigner ce hook qu'à ton module tu peut aussi faire comme ça :

{hook h='tonHook' mod='tonModule'}

Link to comment
Share on other sites

  • 4 months later...

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