Cet article fait partie d’une série d’articles qui présentent les fonctionnalités avancées disponibles dans un controller d’administration Prestashop. ( adminController )
Les exemples sont réalisés dans le cadre d’un module mais s’appliquent également à tous les anciens controllers de l’administration qui n’utilisent pas encore l’infrastructure symfony
Vous pouvez-consulter les autres articles de la série :

Dans cet article nous allons à présent nous intéresser à la gestion des options de notre controller et voir les cas suivants :

  • Ensemble des cas d’affichage d’options
  • Traitement spécifique d’une option

Les options sont définies dans la fonction __construct() du controller
Voici un code qui génère une grande partie des cas  avec les commentaires explicatifs de leur fonctionnement.

Attention car les valeurs des options seront stockées dans la table globale de configuration de Prestashop.
Pensez donc à bien supprimer ces informations lors de la désinstallation de votre module.

Ensemble des cas d’affichage des options

/**
  * Gestion des options
  */
        $this->fields_options = [
            //Groupe d'option n 1
            'general' => [
                //Titre du groupe d'options
                'title' => $this->l('General configuration'),
                //Champs du group d'options
                'fields' => [
                    //Exemple option de type texte
                    'OPTION_KEY_TEXT' => [ //La clé du tableau correspond au nom de la configuration
                        'title' => $this->l('Field Text'),
                        'hint' => $this->l('Field Text Hint'),
                        'validation' => 'isWeightUnit', //Classe de validation ( de la classe Validate )
                        'required' => true, //Champ requis ou non
                        'type' => 'text', //Type de champ
                        'class' => 'fixed-width-sm' //classe css
                    ],
                    //Exemple option de type texte avec langue
                    'OPTION_KEY_TEXT_LANG' => [
                        'title' => $this->l('Field Text Lang'),
                        'hint' => $this->l('Field Text Lang Hint'),
                        'validation' => 'isWeightUnit',
                        'required' => true,
                        'type' => 'textLang', //Type de champ
                        'class' => 'fixed-width-sm'
                    ],
                    //Exemple option de type textarea
                    'OPTION_KEY_TEXTAREA' => [
                        'title' => $this->l('Field Textarea'),
                        'hint' => $this->l('Field Textarea Hint'),
                        'required' => true,
                        'type' => 'textarea',
                        'cols' => 150, //Champ requis Textarea
                        'rows' => 2 // Champ requis Textarea
                    ],
                    //Exemple option de type textarea lang
                    'OPTION_KEY_TEXTAREA_LANG' => [
                        'title' => $this->l('Field Textarea Lang'),
                        'hint' => $this->l('Field Textarea Hint'),
                        'required' => true,
                        'type' => 'textareaLang',
                        'cols' => 150, //Champ requis Textarea
                        'rows' => 2 // Champ requis Textarea
                    ],
                    //Exemple option de type textarea avec TinyMce
                    'OPTION_KEY_TEXTAREA_MCE' => [
                        'title' => $this->l('Field Textarea editor'),
                        'hint' => $this->l('Field Textarea editor Hint'),
                        'required' => true,
                        'type' => 'textarea',
                        'autoload_rte' => true ,//Flag pour afficher l'éditeur de texte
                        'cols' => 150, //Champ requis Textarea
                        'rows' => 2 // Champ requis Textarea
                    ],
                    //Exemple d'option de type "select"
                    'OPTION_KEY_SELECT' => [
                        'title' => $this->l('Sample select fields'),
                        'hint' => $this->l('This is a select field.'),
                        'cast' => 'intval', //Cast appliqué aux valeurs
                        'type' => 'select',
                        'identifier' => 'id_lang', //Champs requis select clé de l'identifiant
                        'list' => Language::getLanguages(false) //Champ requis select source des données
                    ],
                    //Exemple d'option de type boolean
                    'OPTION_KEY_BOOLEAN' => [
                        'title' => $this->l('Bolean Field'),
                        'hint' => $this->l('Bolean Field Hint'),
                        'validation' => 'isBool',
                        'cast' => 'intval',
                        'type' => 'bool',
                        'default' => '1' //Valeur défaut pour l'option boolean
                    ],
                    //Exemple d'option de type file
                    'OPTION_KEY_FILE' => [
                        'title' => $this->l('File Field'),
                        'hint' => $this->l('File Field Hint'),
                        'type' => 'file',
                        'name' => 'OPTION_KEY_FILE' //Champ requis file
                    ],
                    //Exemple d'option de type file avec un thumb
                    'OPTION_KEY_THUMB' => [
                        'title' => $this->l('Thumb Field'),
                        'hint' => $this->l('Thumb Field Hint'),
                        'type' => 'file',
                        'name' => 'OPTION_KEY_FILE',
                        'thumb' => 'https://upload.wikimedia.org/wikipedia/commons/e/ee/Thumbup.jpg' //Champ requis thumb
                    ],
                    //Exemple d'option de type color
                    'OPTION_KEY_COLOR' => [
                        'title' => $this->l('Color Field'),
                        'hint' => $this->l('Color Field Hint'),
                        'validation' => 'isColor',
                        'type' => 'color',
                        'name' => 'OPTION_KEY_COLOR', // Champs requis Color
                        'size' => 7, //CHamps requis Color
                    ],
 
                ],
                //Bouton de soumission
                'submit' => ['title' => $this->l('Save')]
            ],
            //Groupe d'option n'2
            'localization' => [
                'title' => $this->l('Option bloc 2'),
                'icon' => 'icon-globe',
                'fields' => [
                    'OPTION_KEY_TEXT_2' => [
                        'title' => $this->l('Field Text'),
                        'hint' => $this->l('Field Text Hint'),
                        'validation' => 'isWeightUnit',
                        'required' => true,
                        'type' => 'text',
                        'class' => 'fixed-width-sm'
                    ],
                ],
                'submit' => ['title' => $this->l('Save')]
            ],
        ];

Le rendu sera ensuite le suivant pour le premier bloc d’options

Et pour le second bloc d’options

Traitement spécifique d’une option

Ce point est en cours de rédaction