PHP code example of griiv / prestashop-module-contracts

1. Go to this page and download the library: Download griiv/prestashop-module-contracts library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

griiv / prestashop-module-contracts example snippets




namespace VotreNamespace;

use Griiv\Prestashop\Module\Contracts\Module\ModuleAbstract;

class VotreModule extends ModuleAbstract
{
    protected $nameSpace = 'VotreNamespace\\';

    public function __construct()
    {
        $this->name = 'votremodule';
        $this->tab = 'administration';
        $this->version = '1.0.0';
        $this->author = 'Votre Nom';
        $this->need_instance = 0;

        parent::__construct();

        $this->displayName = $this->trans('Votre Module', [], 'Modules.Votremodule.Admin');
        $this->description = $this->trans('Description de votre module', [], 'Modules.Votremodule.Admin');
    }

    public function getHooks(): array
    {
        return [
            'displayHeader',
            'actionProductUpdate',
        ];
    }
}



namespace VotreNamespace\Display;

use Griiv\Prestashop\Module\Contracts\Hook\Hook;
use Griiv\Prestashop\Module\Contracts\Hook\Contracts\DisplayHookInterface;

class DisplayHeader extends Hook implements DisplayHookInterface
{
    public function display($params): string
    {
        $this->setTplName('header');

        $this->context->smarty->assign([
            'custom_var' => 'valeur',
        ]);

        return $this->getModule()->fetch($this->getTpl());
    }
}



namespace VotreNamespace\Action;

use Griiv\Prestashop\Module\Contracts\Hook\Hook;
use Griiv\Prestashop\Module\Contracts\Hook\Contracts\ActionHookInterface;

class ActionProductUpdate extends Hook implements ActionHookInterface
{
    public function action($params): bool
    {
        $product = $params['product'];
        // Votre logique métier ici
        return true;
    }
}



namespace VotreNamespace;

use Griiv\Prestashop\Module\Contracts\Module\ModuleAbstract;
use Griiv\Prestashop\Module\Contracts\Concern\ModuleTrait;
use Griiv\Prestashop\Module\Contracts\Concern\IsUsingNewTranslationSystem;
use Griiv\Prestashop\Module\Contracts\Concern\IsMcpCompliant;

class VotreModule extends ModuleAbstract
{
    use ModuleTrait;
    use IsUsingNewTranslationSystem;
    use IsMcpCompliant;

    // Vous avez maintenant accès à :
    // - getTranslationDomain() : retourne le domaine de traduction
    // - getModuleToken(string $controller) : génère un token de sécurité
    // - isUsingNewTranslationSystem() : active le nouveau système de traduction
    // - isMcpCompliant() : déclare la compatibilité MCP
}



namespace VotreNamespace\Display;

use Griiv\Prestashop\Module\Contracts\Attribute\AsPrestaShopHook;
use Griiv\Prestashop\Module\Contracts\Hook\Hook;
use Griiv\Prestashop\Module\Contracts\Hook\Contracts\DisplayHookInterface;

#[AsPrestaShopHook(name: 'displayHeader', module: 'votremodule')]
class DisplayHeader extends Hook implements DisplayHookInterface
{
    public function display($params): string
    {
        // ...
    }
}

// Obtenir le kernel Symfony
$kernel = static::getKernel();

// Récupérer un service
$service = static::getService('nom.du.service');

// Obtenir un paramètre
$parameter = static::getParameter('nom_du_parametre');

// Accéder à l'EntityManager Doctrine
$em = static::getEntityManager();

src/
├── Attribute/
│   └── AsPrestaShopHook.php              # Attribut PHP 8.0+ pour hooks
├── Concern/
│   ├── IsMcpCompliant.php                # Trait de compatibilité MCP
│   ├── IsUsingNewTranslationSystem.php   # Trait nouveau système de traduction
│   └── ModuleTrait.php                   # Trait avec méthodes utilitaires
├── DependencyInjection/
│   └── CompilerPass/
│       └── PrestaShopHookCompilerPass.php # CompilerPass Symfony pour hooks
├── Hook/
│   ├── Contracts/
│   │   ├── ActionHookInterface.php       # Interface pour hooks d'action
│   │   ├── AdditionalHookInterface.php   # Interface pour hooks additionnels
│   │   ├── DisplayHookInterface.php      # Interface pour hooks d'affichage
│   │   ├── FilterHookInterface.php       # Interface pour hooks de filtrage
│   │   └── ValidateHookInterface.php     # Interface pour hooks de validation
│   └── Hook.php                          # Classe de base pour les hooks
└── Module/
    ├── Contracts/
    │   └── ModuleInterface.php           # Interface du module
    └── ModuleAbstract.php                # Classe abstraite du module