J’ai repris il y a quelques temps la classe (statique) form
de Clearbricks dans une classe parallèle, nommée forms
, avec l’idée d’harmoniser un peu les paramètres de configuration des différentes méthodes.
Exemple :
echo '<label for="' . $wfid . '">' . form::field([$iname, $wfid], 20, 255, [
'default' => html::escapeHTML($s['value']),
'class' => 'maximal' . $class,
'extra_html' => 'lang="' . $core->auth->getInfo('user_lang') . '" spellcheck="true"'
]) . $label . '</label>';
Devenant avec la nouvelle classe :
echo '<label for="' . $wfid . '">' . forms::field([
'name' => $iname,
'id' => $wfid,
'size' => 20,
'length' => 255,
'default' => html::escapeHTML($s['value']),
'class' => 'maximal' . $class,
'extra' => 'lang="' . $core->auth->getInfo('user_lang') . '" spellcheck="true"'
]) . $label . '</label>';
C’est déjà disponible depuis la version 2.20 de Dotclear, mais pas encore appliqué.
Depuis hier je suis en train de réfléchir à une autre façon de fournir ces aides de construction des formulaires, la partie qui me rebute le plus en général, en passant par des classes instanciées plutôt qu’une classe statique, ce qui permet en particulier de « lier » un champ avec son label, ou encore de définir la liste des champs contenus dans un fieldset
.
Pour reprendre l’exemple ci-dessus, le code deviendrait ceci :
$fld = new formField();
$fld->name = $iname;
$fld->id = $wfid;
$fld->size = 20;
$fld->length = 255;
$fld->default = html::escapeHTML($s['value']);
$fld->class = ['maximal', $class];
$fld->lang = $core->auth->getInfo('user_lang');
$fld->spellcheck = true;
$fld->label = new formLabel($label);
echo $fld->render();
Je me demande si je ne vais pas « trop loin » pour ça et si les deux classes (statiques) précédentes, form
et forms
, ne sont pas suffisantes.
Et sinon, question lecture du code, qu’est-ce qui vous semble le plus clair parmi les 3 possibilités ?
1 De olivier -
Pour ma part la dernière proposition est la plus claire. Je retrouve la même « analogie » que pour certaines bibliothèques d’interfaces graphiques.
2 De Nicolas -
Attention tu es en train de réinventer la roue ! par exemple : https://symfony.com/doc/current/forms.html
3 De Franck -
Oui Nicolas je me doute bien que je ne suis pas le premier à vouloir construire une roue ;-)
4 De JcDenis -
Il y a deux choses fastidieuses dans mon passe temps de création de plugin: les formulaires et les tableaux. Tout aide la dessus est la bienvenue. Et ça uniformise de facto le rendu d’ensemble :) Remarque, j’aime bien les versions ou on peut chainer les constructions tel que :
$fld = new formField(); $fld->name($iname) ->id($wfid) ->size(20) ...;
Ou tu peux aussi attendre la prochaine version de php avec les arguments nommés:
$fld = new formField(name: $iname, spellcheck: true, size: 20);
5 De Franck -
Oui j’aime particulièrement le chaînage, comme celui que j’ai mis en place pour les options des widgets ;-)
Exemple pour le widgets tags :
Quant à PHP 8, on va attendre encore un peu !