PHP code example of griiv / prestashop-module-installer

1. Go to this page and download the library: Download griiv/prestashop-module-installer 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-installer example snippets






use Griiv\Prestashop\Module\Installer\GriivInstaller;

class MyModuleInstaller extends GriivInstaller
{
    // Personnalisez si nécessaire
}



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

class MyModule extends Module
{
    private $installer;

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

        parent::__construct();

        $this->displayName = $this->l('Mon Module');
        $this->description = $this->l('Description de mon module');

        // Initialiser l'installeur
        $this->installer = new GriivInstaller($this);
    }

    /**
     * Définir les hooks à enregistrer
     */
    public function getHooks(): array
    {
        return [
            'displayHeader',
            'displayFooter',
            'displayProductPriceBlock',
            'actionProductUpdate',
        ];
    }

    /**
     * Définir les onglets admin à créer
     */
    public function getTabs(): array
    {
        return [
            [
                'class_name' => 'AdminMyModuleSettings',
                'name' => 'Paramètres Mon Module',
                'parent_class_name' => 'AdminParentModulesSf',
                'icon' => 'settings',
                'visible' => true,
            ],
            [
                'class_name' => 'AdminMyModuleStats',
                'route_name' => 'admin_mymodule_stats',
                'name' => 'Statistiques',
                'parent_class_name' => 'AdminMyModuleSettings',
                'icon' => 'assessment',
                'wording' => 'Statistics',
                'wording_domain' => 'Modules.Mymodule.Admin',
            ],
        ];
    }

    public function install(): bool
    {
        return parent::install() && $this->installer->install();
    }

    public function uninstall(): bool
    {
        return $this->installer->uninstall() && parent::uninstall();
    }
}

// Exécuter une seule requête avec transaction
$this->installer->executeQuery("UPDATE `{DB_PREFIX}table` SET col = 'value'");

// Exécuter plusieurs requêtes atomiquement
$this->installer->executeQueries([
    "INSERT INTO `{DB_PREFIX}table` (col) VALUES ('val1')",
    "INSERT INTO `{DB_PREFIX}table` (col) VALUES ('val2')",
    "UPDATE `{DB_PREFIX}config` SET value = 'new' WHERE key = 'setting'",
]);

public function getHooks(): array
{
    return [
        'displayHeader',           // Hook d'affichage dans le header
        'displayFooter',           // Hook d'affichage dans le footer
        'displayProductPriceBlock', // Hook sur la page produit
        'actionCartSave',          // Hook d'action lors de la sauvegarde du panier
        'actionOrderStatusUpdate', // Hook lors du changement de statut commande
    ];
}

public function getTabs(): array
{
    return [
        [
            // Identifiant unique de la classe du contrôleur
            'class_name' => 'AdminMyModuleMain',

            // Nom affiché dans le menu (peut être un tableau pour multilingue)
            'name' => 'Mon Module',

            // Classe parente pour la hiérarchie du menu
            'parent_class_name' => 'AdminParentModulesSf',

            // Icône Material Icons
            'icon' => 'extension',

            // Visibilité dans le menu
            'visible' => true,
        ],
        [
            'class_name' => 'AdminMyModuleConfig',

            // Route Symfony pour les contrôleurs modernes
            'route_name' => 'admin_mymodule_config',

            'name' => 'Configuration',
            'parent_class_name' => 'AdminMyModuleMain',
            'icon' => 'settings',

            // Clés de traduction i18n
            'wording' => 'Configuration',
            'wording_domain' => 'Modules.Mymodule.Admin',
        ],
    ];
}

interface InstallerInterface
{
    public function install(): bool;
    public function uninstall(): bool;
    public function installModuleTab(array $tabInfo): int;
    public function uninstallModuleTab(string $tabClass): bool;
}



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

er;

class ExampleModule extends Module
{
    private GriivInstaller $installer;

    public function __construct()
    {
        $this->name = 'examplemodule';
        $this->tab = 'front_office_features';
        $this->version = '1.0.0';
        $this->author = 'Griiv';
        $this->need_instance = 0;
        $this->ps_versions_compliancy = [
            'min' => '1.7.7.0',
            'max' => _PS_VERSION_,
        ];

        parent::__construct();

        $this->displayName = $this->l('Example Module');
        $this->description = $this->l('Un module exemple utilisant GriivInstaller');

        $this->installer = new GriivInstaller($this);
    }

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

    public function getTabs(): array
    {
        return [
            [
                'class_name' => 'AdminExampleModule',
                'name' => 'Example Module',
                'parent_class_name' => 'AdminParentModulesSf',
                'icon' => 'star',
            ],
        ];
    }

    public function install(): bool
    {
        return parent::install() && $this->installer->install();
    }

    public function uninstall(): bool
    {
        return $this->installer->uninstall() && parent::uninstall();
    }

    // Implémentation des hooks
    public function hookDisplayHeader($params)
    {
        // Votre code ici
    }

    public function hookDisplayFooter($params)
    {
        // Votre code ici
    }
}

// Dans votre module ou contrôleur
$installer = new GriivInstaller($this->module);

// Requête unique
$success = $installer->executeQuery(
    "INSERT INTO `" . _DB_PREFIX_ . "mymodule_log`
     (action, date_add) VALUES ('user_action', NOW())"
);

// Requêtes multiples (atomique)
$success = $installer->executeQueries([
    "UPDATE `" . _DB_PREFIX_ . "mymodule_config` SET value = '1' WHERE key = 'enabled'",
    "DELETE FROM `" . _DB_PREFIX_ . "mymodule_cache`",
    "INSERT INTO `" . _DB_PREFIX_ . "mymodule_log` (action) VALUES ('config_reset')",
]);

prestashop-module-installer/
├── src/
│   ├── InstallerInterface.php      # Interface définissant le contrat
│   ├── InstallerAbstract.php       # Implémentation de base (template method)
│   └── GriivInstaller.php          # Implémentation concrète
├── composer.json
├── README.md
└── LICENSE