PROJET AUTOBLOG


Warrior du Dimanche

Site original : Warrior du Dimanche

⇐ retour index

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

jeudi 28 novembre 2013 à 18:28

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:

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