Auto_form 0.21 : il est ENCORE mieux... [28/11]

L'année dernière, dans la série des auto_*, je vous avais filé un script qui générait un formulaire à partir d'un tableau.

 

Il était très basique mais fonctionnait bien, j'ai toutefois eu besoin de quelques améliorations pour certains cas précis, ce qui m'a conduit à reprendre le tout pour l'améliorer un peu.

Comme d'hab', si ça peut servir, pas la peine de se retaper le truc.

 

Ci-dessous, la suite...

 


Le script se compose de deux pages php:

  • auto_form.php qui génère un formulaire à partir d'un array
  • auto_form2file.php qui se charge des données postées par ce formulaire et les sauvegarde dans un fichier.

Ainsi, le duo gère entièrement la génération et la gestion des données d'un formulaire. Je l'ai utilisé maintes fois pour créer une page de configuration par exemple.

include('auto_form.php');
include('config.php'); // contient la variable de config
(...)

<php render_form($config); ?>

 


 

Bien entendu, le script adaptera les éléments du formulaire au type de données du tableau (booléen/chaine) mais de plus, l'utilisateur pourra configurer le script pour que certaines données du formulaire génèrent un type d'élément particulier; ainsi, dans un formulaire d'inscription, on pourra décider que la clé 'url_user' du tableau génèrera un input de type url en forçant le type via la config d'auto_form:

autoform['url_user']['type']='url';

On peut ainsi forcer le type à date, time, tel ou même textarea... autoform fera le nécessaire. Si aucun type n'est spécifié pour une donnée string, le script génèrera un input de type text.

 

 

Si on souhaite que le visiteur ait un choix à effectuer dans une liste, il suffit de préciser cette liste:

$autoform['os']['list']=array('Linux','windows','the apple crap');

Par défaut, auto_form génèrera un select contenant la liste en question, mais si on préfère une suite de radiobuttons:

$autoform['os']['type']='radio';

 

Simple, non ?

Sur ce modèle, on peut gérer les attributs des objets générés:

$autoform['url_user']['required']=true; // remplissage obligatoire
$autoform['url_user']['class']='important'; // ajout de classe
$autoform['age']['disabled']=true; // bloquer un objet

Voici la liste des attributs gérés:  

$autoform['the key you want to customize'][type] //to force the type
$autoform['the key you want to customize'][class] //to add classes
$autoform['the key you want to customize'][placeholder] //to add a placeholder (default value, the key name) if specified, it overcomes the $autoform['use_placheholder']=false
$autoform['the key you want to customize'][required]=true //to force the required attribute
$autoform['the key you want to customize'][autocomplete]=true/"off" //to force the autocomplete attribute to off
$autoform['the key you want to customize'][spellcheck]=true //to force the spellcheck attribute
$autoform['the key you want to customize'][autofocus]=true //to force the autofocus attribute
$autoform['the key you want to customize'][disabled]=true //to force the disabled attribute
$autoform['the key you want to customize'][readonly ]=true //to force the readonly  attribute
$autoform['the key you want to customize'][list]=array('item 1','item 2 ' etc ); //to create a list of values ([type]=radio or select)
$autoform['the key you want to customize'][max]=50; //sets the max attribute for type=number
$autoform['the key you want to customize'][min]=50; //sets the min attribute for type=number
$autoform['the key you want to customize'][step]=10; //sets the step attribute for type=number

 

Comme nous en sommes aux classes, abordons celui des classes ajoutées par défaut aux objets:

auto_form ajoute systématiquement une classe du nom de l'index du tableau source et, si on a configuré auto_form pour qu'il génère les labels, ces-derniers possèdent la même classe ainsi qu'une classe du type de l'objet.

Ainsi, pour un $config['url_user']="http://www.warriordudimanche.net", dont le type est forcé à 'url' on obtiendra:

<li> 
    <label for="url_user" class="url_user url">url_user</label> 
    <input type="url" name='url_user' id='url_user' class='url_user' value="http://www.warriordudimanche.net" />
</li>


Il est donc possible de cibler très précisément chaque objet et son label, y compris selon leur type.

 


 

Comme je le disais à l'instant, on peut configurer auto_form pour qu'il génère ou pas les labels ou les placeholders, préciser sa method, la page action etc...:

$autoform=array(
    'use_labels'=>true,
    'use_placeholder'=>false,
    'method'=>'post',
    'action'=>'auto_form2file.php',
    'form_name'=>'autoform',
    'form_id'=>'autoform',
    'form_class'=>'autoform',
    'enctype'=>'',
    'submit_button_label'=>'Envoyer'
);

Si on veut les placeholders, le script ajoutera le nom de la clé dans l'attribut placeholder de l'objet.

<input type="url" name='url_user' id='url_user' placeholder="url user" class='url_user' value="www.warriordudimanche.net" />

On peut toutefois changer ce placeholder en le forçant:

$autocss['url_user']['placeholder']='Votre site internet';

 

Pour ce qui est de la page action, on peut laisser auto_form2file.php ou bien appeler une autre page dans laquelle on se contentera d'include la page.

 

Autre détail, on peut configurer auto_form.php dans le script lui-même, mais ce n'est pas du tout obligatoire: il suffit de fixer l'array $autoform avant d'appeler la fonction render_form...

Il est donc possible de générer plusieurs formulaires différents à la suite en changeant la configuration entre deux.


 

Autre nouveauté, j'ai ajouté une sécurisation minimum des données post par le biais d'une fonction postée il y a quelques semaines ( secure() )

Par défaut, cette dernière passe les données au strip_tags... Je n'ai pas poussé plus avant, chacun ayant ses propres habitudes en la matière et la sécurisation pouvant varier selon les situations.

 


 

 

 

Bon, t'es bien gentil, Bronco, mais tout ça pour quoi ?

 

 

 

 

 

Judicieuse question où la pertinence se dispute à l'éloquence... malgré ce que d'aucun nommeraient une tête de con.

 

 

 

 

Ben ça permet de pas se fissurer le joufflu à refaire les formulaires à la main dès qu'on ajoute des clés au tableau (cf le cas d'une config ) et ça permet même de ne plus du tout s'emm... à faire des formulaires... tout se fait tout seul et s'adapte aux modifications, le tout en conservant toujours une structure prévisible.

 

Pour tester, c'est par là mais pour le download ... ZIP

❝ 9 commentaires ❞

1  jerrywham le

En voilà une idée qu'elle est bonne !


Quelques petites remarques cependant :



  • pourquoi utiliser des global ?

  • ya un truc que je pige pas : tu peuples ton tableau $autoform, ok mais pour afficher le rendu tu fais appel à $config dans la fonction render_form et là je ne pige plus. Pourquoi n'appelle-t-on pas directement render_form($autoform) ?

  • il serait bien d'avoir la liste de tous les index possible du tableau dans une sorte de doc ou sur la page de présentation (sauf s'ils sont déjà tous présents dans cet article).


Quoi qu'il en soit, merci pour le partage

 
2  jerrywham le

Je viens de comprendre (boulet inside) :



  • ton tableau $autoform sert à configurer le formulaire de façon générale.

  • $config apporte les valeurs que l'on veut y voir apparaitre c'est ça ? (d'où l'utilisation des "global").

 
3  jerrywham le

Dernière remarque après j'arrête : pourquoi utiliser des li et pas de p dans la mise en forme de ton formulaire ? Et ça serait bien si on pouvait également avoir le choix d'utiliser ou pas des fieldsets...

 
4  Bronco le

En effet:



  • l'array autoform sert à configurer le script (et on peut tout à fait envisager d'ajouter des comportements pour les li/p ou le fieldset, c'est une excellente idée)

  • l'array config est simplement un exemple: c'est le tableau qui sert de base au script pour la génération du formulaire. Ce pourrait être un autre tableau.

 
5  Yan le

Hello,
le fichier auto_form2file.php est manquant dans l'archive.
Merci.

 
6  Bronco le

oops, c'est tout moi ça
Je vais sans doute faire une mise à jour d'ici ce soir, je corrigerai à ce moment-là, ok ?

 
7  Bronco le

Ben en fait, j'ai reup le zip avec le fichier manquant... je ferai la maj quand même plus tard

 
8  Yann le

Pas de soucis, merci par avance

 
9  Bronco le

Mise à jour uploadée: elle gère plus d'attributs et permet de configurer la balise qui englobe chaque élément du formulaire via la variable $autoform['surrounding_object']='li'...


a plus les copains

 

Fil RSS des commentaires de cet article

✍ Écrire un commentaire

les commentaires relevant du SPAM seront filtrés et dégagés direct...

Quelle est le quatrième caractère du mot 5d0say ?