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')
]; |
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 :
…