La version 1.7 rajoute une nouvelle notion pour gérer les champs sur certains formulaires front ( Client et Adresse entre autre )
Ceux-ci sont géré via la classe FormField et leur affichage est géré dans le template themes/themeName/templates/_partials/form-fields.tpl
Les méthodes utiles pour gérer ces champs sont les suivantes :
- setName: Défini le nom du champ
- setType: Défini le type du champ ( text/checkbox .. ) voir liste ci-dessous
- setRequired : Défini si le champ est obligatoire ou non
- setLabel : Défini le label du champ
- setValue : Défini la valeur du champ
- setAvailableValues : Défini les valeurs disponibles pour le champ, pour les select entre autre
- addAvailableValue : Ajout une valeur disponible pour le champ
- setMaxLength: Longueur maximum du champ
- setConstraint : Ajoute une contrainte de validation au champ , les méthodes appelables sont celles de la classe Validation ( ex isEmail )
Pour l’exemple j’ai ajouté des nouveaux champs au formulaire de création de compte client via le hook hookAdditionalCustomerFormFields
Voici l’ensemble des types de champs possibles :
return [ //Champ texte standard (new FormField) ->setName('professionnal_id') ->setType('text') ->setRequired(true) //Décommenter pour rendre obligatoire ->setValue("TEST") ->setMaxLength("10") ->setLabel($this->l('Professionnal id')), //Champ File (new FormField) ->setName('justificatif_upload') ->setType('file') ->setLabel($this->l('document ID')), //Select (new FormField) ->setName('select_field') ->setType('select') ->setAvailableValues(array('key' => 'value 1', 'key2' => 'value2')) ->setLabel($this->l('Select type')), //countrySelect ( idem select mais rajoute une classe js js-country (new FormField) ->setName('country_field') ->setType('countrySelect') ->setAvailableValues(['key' => 'value 1', 'key2' => 'value2']) ->setLabel($this->l('Country Select')), //Checkbox (new FormField) ->setName('checkbox_field') ->setType('checkbox') ->setValue(1) ->setLabel($this->l('Checkbox type')), //radio-buttons (new FormField) ->setName('radio_field') ->setType('radio-buttons') ->setAvailableValues(array('key' => 'value 1', 'key2' => 'value2')) ->setLabel($this->l('Radio buttons type')), //date (new FormField) ->setName('date_field') ->setType('date') ->setLabel($this->l('Date')), //birthday (new FormField) ->setName('birthday_field') ->setType('birthday') ->setLabel($this->l('birthday')), //password (new FormField) ->setName('password_field') ->setType('password') ->setLabel($this->l('password')), //Champ email (new FormField) ->setName('email_field') ->setType('email') ->setLabel($this->l('email type')), //Champ tel (new FormField) ->setName('phone_field') ->setType('phone') ->setLabel($this->l('Phone type')), //Champ caché (new FormField) ->setName('hidden_field') ->setType('hidden') ->setValue('My hidden value') ]; |
Et leur visualisation :
juillet 2nd, 2019
Bonjour je voulais savoir comment on peu faire des choix multiples en « radio-buttons » ou en « checkbox » merci
juillet 5th, 2019
Bonjour,
Sur ce point je ne saurais malheureusement pas vous répondre j’avais tenté de les gérer via les formfields standards mais mes tentatives n’avaient pas fonctionné. :/
juillet 15th, 2019
Merci quand même pour votre réponse
septembre 6th, 2019
Je me demandais s’il existait des champs qui dépendent d’autre.
En fonction d’un choix, on fait apparaître un champs.
Ou si ça se fait en js…
septembre 6th, 2019
Bonjour François,
A ma connaissance pas d’autres possibilités que de le faire en js :/
septembre 23rd, 2019
Je n’arrive pas à le faire en php. Par contre auriez-vous une idée de l’endroit (ou du fichier) pour faire cela en JS ?
Merci !
septembre 23rd, 2019
Bonjour Nicolas,
Désolé mais votre retour est un peu vague du coup je ne comprends pas ce que vous n’arrivez pas à faire en php 😀
avril 23rd, 2020
Bonjour,
Je n’arrive pas à comprendre où est-ce qu’il faut inséré le code ?
Merci pour votre réponse
avril 23rd, 2020
Bonjour,
Cet article explique juste les différents types de formfields possibles.
Que souhaitez-vous faire exactement ?
juin 25th, 2020
Bonjour,
Merci pour cet article.
J’ai vu qu’on pouvais seter le type via setType(‘countrySelect’). Savez-vous si il est possible de faire pareil pour le groupe d’utilisateur ?
Merci !!
juin 25th, 2020
Bonjour,
Malheureusement non ce n’est pas un type prédéfini
L’ensemble des cas possibles sont visibles ici : https://github.com/PrestaShop/PrestaShop/blob/develop/themes/classic/templates/_partials/form-fields.tpl
Dans votre cas il suffit de faire un champ de type select et de lui assigner la liste des groupes de clients.
Cordialement,
hervé