Aller au contenu

Articles correspondants à ‘hook’

20
Feb

Leçon 3: Créer un module sous prestashop

Grâce à ce tutoriel, vous allez vraiment pouvoir commencer à customiser et dynamiser votre e-commerce via la création de modules. Je vous décrirai toutes les étapes en détails, vous allez voir, c’est très simple !

EDIT : Je vous met maintenant à disposition un générator de module !

Je considère que vous avez déjà une boutique prestashop installé et que vous connaissez un minimum la structure de cette dernière. Si non, reportez-vous à la leçon 1 et la leçon 2.

1 – Création du module

Ici, nous travaillerons uniquement dans le dossier “module” situé à la racine de votre site.

Sous prestashop, un module est tout d’abord un dossier, c’est pourquoi nous allons commencer par en créer un dans le dossier modules où vous pouvez déjà apercevoir tout les modules déjà présents dans votre boutique. Nous l’appellerons “monmodule”.

dossier prestashopmodules
|– dossier prestashop monmodule

Tout les fichiers nécessaires au fonctionnement de notre module devront être placés dans “monmodule”

Un module est une classe, étendue de la classe “Module”, cela peut paraître effrayant mais pas de panique, vous n’êtes pas obligé de maitriser la programmation orientée objet pour créer un module qui envoi du lourd ;)

Créez un nouveau fichier php dans “monmodule” puis ouvrez le. Pour créer et éditer un fichier php je vous conseil Notepad++ si vous êtes sous Windows ou Coda si vous êtes sous Mac.

Insérez le code ci-dessous :

1
2
3
4
class Monmodule extends Module
{
 
}

Sauvegardez. Voilà, vous venez de créer votre premier module :D , bon évidemment, il n’est pas identifiable et ne sert à rien, vous pouvez tout de même l’apercevoir dans l’onglet module de l’administration.

module prestashop non configuré

2 – Configuration du module Nous allons maintenant ajouter plusieurs fonctions dans notre module. Il va falloir donner un nom à notre module, lui définir sa version, sa description ect.. Pour cela, ajouter la fonction “__construct()”

1
2
3
4
5
6
7
8
9
10
11
12
13
class Monmodule extends Module
{
	function __construct()
	{
		$this->name = 'monmodule';
		$this->tab = 'Mes modules';
		$this->version = 0.1;
		$this->displayName = $this->l('Mon super module');
		$this->description = $this->l('Description de mon super module');
 
		parent::__construct();
	}
}
  • $this->name = ‘monmodule’;

Ici le nom de votre module : monmodule

  • $this->tab = ‘Mes modules’;

Ici la catégorie de votre module : Mes modules ( ou aussi “Stats” ou “Blocks” en fonction de l’utilité de votre module )

  • $this->version = 0.1;

Ici la version  ( à titre indicatif )

  • $this->displayName = $this->l(‘Mon super module’);

Ici le nom de votre module qui sera affiché dans la liste des modules.

  • $this->description = $this->l(‘Description de mon super module’);

Ici une description courte de votre module

Sauvegarder. Rendez-vous dans l’onglet “Modules” de l’administration. Enfin ! on peut apercevoir votre module avec la configuration que nous avons établi. Si vous cliquez sur “installer”, rien ne se passera, votre module sera simplement considéré comme installé.

module prestashop configuré

Pour exécuter des actions à l’installation ou la désinstallation du module,ajouter les fonctions suivantes :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Monmodule extends Module{
 
	function __construct()
	{
		$this->name = 'votremodule';
		$this->tab = 'Mes modules';
		$this->version = 0.1;
		$this->displayName = $this->l('Mon super module');
		$this->description = $this->l('Description de mon super module');
 
		parent::__construct();
	}
 
	function install()
	{
		if (!parent::install())
			return false;
		if (!$this->registerHook('top'))
			return false;
		return true;
	}
 
	public function uninstall()
 	{
 	 	if (!parent::uninstall())
 	 		return false;
 	}
}

Ici, la fonction install() va installer votre module et l’enregistrer sur le hook “top”, allez dans l’onglet “positions” de la section “Modules”, après avoir installé votre module, vous verrez qu’il est enregistré sur la position “Top of pages”. Il existe plusieurs hook dans divers parties de votre site, tel que “leftColumn” , “rightColumn” ou footer.

La fonction unistall() va simplement désinstaller votre module.

Vous pouvez par exemple ajouter dans ces fonctions la création de table dans la base de donnée à l’installation ou la suppression lors de la désintallation.

Dans la liste des modules installés sur votre boutique, vous pouvez constater que certains d’entre eux sont configurable via un lien “>> Configurer”.

Pour implémenter cette fonctionnalitée à votre module, il suffit d’ajouter la fonction “getContent()” :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Monmodule extends Module{
	function __construct()
	{
		$this->name = 'monmodule';
		$this->tab = 'Mes modules';
		$this->version = 0.1;
		$this->displayName = $this->l('Mon super module');
		$this->description = $this->l('Description de mon super module');
 
		parent::__construct();
	}
 
	function install()
	{
		if (!parent::install())
			return false;
		if (!$this->registerHook('top'))
			return false;
		return true;
	}
 
	public function uninstall()
 	{
 	 	if (!parent::uninstall())
 	 		return false;
 	}
 
	public function getContent()
	{
 
	}
 
}

Dans cette fonction, ajoutez le code que vous souhaitez, je vous donne un petit exemple que vous pouvez essayer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public function getContent()
	{
		if (isset($_POST['submit'])){
			if (!empty($_POST['lastname']) AND !empty($_POST['firstname']))
				echo '
<h1>Bonjour '.$_POST['firstname'].' '.$_POST['lastname'].'</h1>
';
			else
				echo '<span class="warning" style="display: block;">Erreur : Veuillez entrer votre nom et prenom</span>';
		}
 
		echo '
<fieldset>
<legend> Administration du module : </legend>
<form method="post">
     				Nom :
<input name="lastname" type="text" />
     				Prenom :
<input name="firstname" type="text" />
<input name="submit" type="submit" value="Envoyer" />
     			</form></fieldset>
';
 
	}

Dernières fonctions utiles, celles qui vont s’exécuter lors de l’appel du hook correspondant à votre module.

1
2
3
function hookTop($params){
		return $this->display(__FILE__, 'monmodule.tpl');
	}

Ici nous utilisons la fonction hookTop car notre module est enregistré sur le hook “top”, vous pouvez voir qu’ici j’ai retourné un fichier tpl.

Grâce à cette fonction, dans la partie ‘Top of pages’ va s’afficher le code que vous aurez mis dans le fichier “monmodule.tpl”. Vous n’êtes cependant pas obligé d’utiliser ces fonctions si votre module ne sera pas utilisé pour afficher quelques chose dans votre site (comme un block par exemple).

Faites vos requêtes et vos assignations smarty dans cette fonction.

Si vous n’avez pas tout compris, n’hésitez pas à poser vos questions en laissant un commentaire ci-dessous ;)

Je vous met ce module à disposition en téléchargement ici