# Créer votre premier block

# Concept

Un module peut enregistrer plusieurs blocks Vous trouverez en exemple notre module classicblocks qui reprend les 4 modules PrestaShop essentiels:

  • Slider
  • Bannière
  • Text personnalisé
  • Produits phares

=> Github des classicblocks (opens new window)

# Module

Voici la structure classique d'un module.

<?php 

use PrestaShop\PrestaShop\Core\Module\WidgetInterface;
class FakeModule extends Module implements WidgetInterface
{
    public function __construct()
    {
        $this->name = 'fakemodule';
        $this->tab = 'administration';
        $this->version = '1.0.0';
        $this->author = 'PrestaSafe';
        $this->need_instance = 1;

        $this->bootstrap = true;
        parent::__construct();

        $this->displayName = $this->l('Fake module');
        $this->description = $this->l('Fake module');
        
        $this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);
    }

    public function install()
    {
        return parent::install() && $this->registerHook('ActionRegisterBlock');
    }

    public function uninstall()
    {
        return parent::uninstall() && $this->unregisterHook('ActionRegisterBlock');
    }
    
    // Register blocks here.
    public function hookActionRegisterBlock()
    {
        $blocks = [];
        $blocks[] = [
            'name' => 'Fake block',
            'description' => 'Description of your block',
            'code' => 'fake_block', // required must be uniq
            'icon' => 'StarIcon', // https://heroicons.com V2
            'need_reload' => true, // reload iframe after save
            'nameFrom' => 'field_name' // take the name of a config field
            'templates' => [
                'default' =>  'module:'.$this->name.'/views/templates/block/default.tpl'
            ],
            'config' => [
                'fields' => [
                    // ... array of fields
                ]
            ],
            'repeater' => [
                'name' => 'Element repeated',
                'nameFrom' => 'field name',
                'groups' => [
                    // ... array of fields
                ]
            ]

        ]

        return $blocks;
    }

}

Le hook ActionRegisterBlock est prévu pour enregistrer un ou plusieurs block(s) dans le Prettyblocks.

# Détails d'un block

Champs Description Type Required
name Nom d'affichage de votre block String true
description Description de votre block String true
code Description de votre block doit absolument être unique String true
icon Icon heroicons (v2) en format camelCase
ex: academic-cap => AcademicCapIcon
Liste disponible ici: Heroicons (opens new window)
String false
nameFrom Donner un nom custom à votre block
ex: title
Prendra le valeur du contenu du champs de configuration title
String false
need_reload Rechargement de l'iframe après avoir sauvegardé un block, utile si vous développez un block de type slider par exemple
Default: true
String false
templates Templates de votre block, il est impératif d'avoir un template avec la clé default
Vous pouvez enregistrer autant de templates que vous souhaitez
Array true
config Champs de configuration de votre block
Doit avoir un tableau de champs
'fields' => [ /*... fields ...*/ ]

voir Champs disponibles
Array false
repeater Champs répétables
Plus de détails Champs répétable
Array false

# Champs répétables

Les champs répétables vous permettront de mettre autant de données que l'utilisateur le souhaite. Plusieurs paramètres sont requis.

Champs Description Type Required
name Nom par défaut des éléments listés String true
nameFrom Prend le nom de la valeur du champs répété
ex: 'nameFrom' => 'title' affichera la valeur du champs title dans la liste
String false
groups Liste des champs
voir Champs disponibles
Array false