[TUTO] créer un modulefrontcontroller avec Prestashop - PrestaSafe
PrestaShop solution e-commerce
|

[TUTO] créer un modulefrontcontroller avec Prestashop

Comme vous le savez, avec Prestashop, vous avez la possibilité d’ajouter un point d’entrée (endpoint) depuis un module.

Pour cela il faut faire ce que l’on appel un ModuleFrontController.

Comment faire un Front Controller depuis un module Prestashop ?

La manipulation n’a rien de compliquée, j’ai du creuser un peu partout parce que la documentation officielle manque d’un peu de détails mais au final c’est très simple.

1 – votre module doit avoir un dossier /controllers/ puis à l’intérieur de celui-ci un dossier front (back pour le backoffice)

2 – Ajouter un fichier php que vous nommé comme vous le souhaitez (notre exemple: display.php)

3 – dans le display.php crééz une classe qui étends la classe ModuleFrontController

ex:


if (!defined('_PS_VERSION_'))
        exit;


class monmoduledisplayModuleFrontController extends ModuleFrontController
{

  public function __construct()
  {
    parent::__construct();
    
  }
  
  public function initContent()
  {
    parent::initContent();
    $this->setTemplate('account-controller.tpl');

  }


}
?>

EDIT:
Si vous êtes en PrestaShop 1.7, le `setTemplate` devra être comme ceci:


$this->setTemplate('module:monmodule/views/templates/front/account-controller.tpl');

désormais, votre module possède bien un front controller.

Voici l’architecture d’un module d’exemple:

Le nom de la classe doit absolument être composé comme tel:

{nomdumodule}{nomducontroller}ModuleFrontController

dans notre cas:

monmoduledisplayModuleFrontController

En ce qui concerne le template dans le initContent() on ajoute un template que vous devez placer dans:

/votremodule/views/templates/front/account-controller.tpl

Maintenant il ne vous manque plus qu’a avoir le lien de celui-ci, pour cela, utilisez la classe Link de PS:

avec smarty:

{$link->getModuleLink('nom_dossier_module','nom_fichier_php')}

donc:

{$link->getModuleLink('monmodule','display')}

avec php:

$this->context->link->getModuleLink('monmodule','display');

l’url est du type:

http://locahost/prestashop/module/monmodule/display

N’hésitez pas à poser vos questions en commentaire.

Enjoy 😉

Publications similaires