Carnet Wiki

Formulaire b-a-ba , Charger ...

Version 8 — Juillet 2018 — 78.242.xx.xx

Formulaire, commençons par le commencement, qui peut le moins pourra peut être le plus ..

Vous êtes à À l’aise avec les boucles spip, mais vous n’avez rien compris à la doc sur les formulaires CVT . ( et donc comme moi , révérant mais inapte à participer ). Alors vous êtes comme moi. Ce texte, à corriger et compléter, aimerait vous essayer de préparer à y comprendre un peu quelque chose.

Par l’exemple, comment se préparer à intégrer un formulaire HTML dans une page d’un SPIP !

1°) intégrer un formulaire comme celui ci-dessous à apage0.html (appelée avec spip.php ?page=apage0) ne peut rien faire (sauf si un plugin s’en charge) !
On voit juste, au clic sur le bouton ; cela a à pour effet de remettre à zéro les saisies effectuées :

< html ... body>
<hr />
 <form method="post" action="#SELF"> <!-- #SELF ou #ENV{action} -->
 #SET{un_tableau, #ARRAY}
  <input type='text' name='texte' id='texte' value="#ENV{texte}" class="text" />
  <input type='text' name='texte2' id='texte2' value="#SET{un_tableau,#GET{un_tableau}|push{texte2}}" class="text" />
<hr />
   <input type="radio" name="choix" value="#SET{un_tableau,#GET{un_tableau}|push{YES}}" checked="">
   <label>Oui</label>
   <input type="radio" name="choix" value="#SET{un_tableau,#GET{un_tableau}|push{NO}}">
   <label>Non</label>
   <input type="radio" name="choix" id="coucou" value="#SET{un_tableau,#GET{un_tableau}|push{niOuiniNon}}">
   <label class="checkbox-inline" for="coucou">Autre</label>
<hr />
   <input type="checkbox" name="soif" value="#SET{un_tableau,#GET{un_tableau}|push{Soif}}">
   <label>Soif</label>
   <input type="checkbox" name="faim" value="NON agree">
   <label>Faim</label>
   <input type="checkbox" name="choix" id="motID_MOT" value="#SET{un_tableau,#GET{un_tableau}|push{Autre}}">
   <label class="checkbox-inline" for="coucou">Autre</label> 
<hr />
  <input type="submit" value="<:bouton_enregistrer:>" class="ui button" /> <!-- class="submit" -->
 </form>
<hr /><hr />
[ //  une instruction SPIP pour afficher les valeurs mémorisées en HTML (#REM) ] 
[(#GET{un_tableau}|foreach)]
</ body... html>

La page affiche le tableau déclaré par #SET qui pourrait aussi bien être à l’extérieur du formulaire :
-  => texte2
-  1=> YES
-  2=> NO
-  3=> niOuiniNon
-  4=> Soif
-  5=> Autre

2°) on extrait le source du formulaire (copie-collé en incluant #GET) dans un fichier /formulaire/aform.html ), que l’on fait ré-intègrer en place par l’appel de balise SPIP [(#FORMULAIRE_AFORM)].
Pas de changement .

3°) créer un fichier /formulaire/aform.php :

<?php
function formulaires_aform_charger_dist(){
	$valeurs = array(
		"texte" => "blabla",
		"choix" => "",
		"soif" => "",
		"faim" => "",
		"autre" => ""
		);
	return $valeurs;
}
...
?>

3°) créer un fichier /formulaire/aform.php :

&lt;?php
function formulaires_aform_charger_dist(){
	$valeurs = array(
		"texte" => "blabla",
		"choix" => "",
		"soif" => "",
		"faim" => "",
		"autre" => ""
		);
	return $valeurs;
}
...
>
 &lt;/cadre >
 Insérer <code>[<pre>(#ENV**|unserialize|print_r{1})</pre>]</code> dans la apage.html (appelée par spip.php?page=apage) nous dit que aform est bien là et nous permet de tester :
Array
(
    [page] => aform
    [formulaire_action] => aform
    [formulaire_action_args] => M6UjFa2PWC(...)==
    [texte] => blabla
    [choix] => 
    [soif] => 
   ...
 ? => 
  ...
également , spip.php?page=apage&var_mode=debug , nous dit que les valeur texte: blabla , choix: , soif: etc..., sont bien là aussi


{{mais comment conserver et récupérer les données du formulaire ?}}
-* {{conserver :}} 
Si dans la zone de texte vous tapez un texte après voir cliqué sur submit [enregistrer] la valeur du texte est sauvegardé grâce à <code>value="#ENV{texte}"</code>
Mais pour les radios~checkboxs ? <code>value="#ENV{soif}"</code> n'a pas d'effet , cela ne signale pas que la case est "checked". La solution : <code>[(#ENV{choix}|=={Yes}|oui)checked]</code>
-* {{récupérer :}}
avec #SET ... |push 
&lt;cadre class='spip '>
 class="lan­gage ">
 <div class="formulaire_spip formulaire_aform" id="formulaire_aform">
 <form method="post" action="#ENV{action}"> <!-- #SELF ou #ENV{action}  -->
#ACTION_FORMULAIRE <!-- {#ENV{action}} inutile, valeur par défaut-->
 #SET{un_tableau, #ARRAY}
  #SET{un_tableau,#GET{un_tableau}|push{#ENV{texte}}}
  <input type='text' name='texte' id='texte' value="#ENV{texte}" class="text" />
<hr />
 #SET{tableau2, #ARRAY}
   <input type="radio" name="choix" value="Yes" [(#ENV{choix}|=={Yes}|oui)checked] />
   <label>Oui</label>
   <input type="radio" name="choix" value="No" [(#ENV{choix}|=={No}|oui)checked] />
   <label>Non</label>
   <input type="radio" name="choix" value="toto" [(#ENV{choix}|=={toto}|oui)checked] />
   <label>Autre</label>
 #SET{tableau2,#GET{tableau2}|push{#ENV{choix}}}
<hr />
 #SET{tableau3, #ARRAY}
   <input type="checkbox" name="soif" value="on1" id="soif" [ (#ENV{soif}|oui)checked] />
   <label>Soif</label>
   #SET{tableau3,#GET{tableau3}|push{#ENV{soif}}}
   <input type="checkbox" name="faim" value="on2" id="faim" [ (#ENV{faim}|oui)checked] />
   <label>Faim</label>
   #SET{tableau3,#GET{tableau3}|push{#ENV{faim}}}
   <input type="checkbox" name="autre" value="on3" id="autre" [ (#ENV{autre}|oui)checked] />
   <label>Autre</label> 
   #SET{tableau3,#GET{tableau3}|push{#ENV{autre}}}
<hr />
  <input type="submit" value="<:bouton_enregistrer:>" class="ui button" />  <!-- class="submit" -->
 </form>
</div>
<hr /><hr />
 [(#GET{un_tableau}|foreach)]
<hr /><hr />
 [(#GET{tableau2}|foreach)]
<hr /><hr />
 [(#GET{tableau3}|foreach)]
</div>

De là on voit bien comment exploiter ces tableaux dans des boucles spip.

Voilà pour un début de compréhension de la fonction _charger des formulaires CVT
(on peut aussi passer une requête à l’url via cette fonction : ’trucs’=>_request(’trucs’) ,
c’est un autre monde mais si des geeks désœuvrés veulent compléter
La fonction charger() des formulaires CVT
Passage d’arguments aux fonctions CVT

4°) ...