Carnet Wiki

Crayons controleurs et vues - doc complémentaire

SPIP-Contrib :: Carnet Wiki :: Recherche :

Crayons controleurs et vues - doc complémentaire

On trouvera ici
-  des compléments de documentation
-  des exemples de contrôleurs et vues
-  Un exemple d’utilisation du datepicker

Edition par un input ligne ou par un textarea ?

La doc indique que « si un texte crayonnable est un champ MySQL MEDIUMTEXT ou plus long, les crayons affichent un TEXTAREA, et sinon, un INPUT. » mais en fait le code teste AUSSI si il y a des fins de ligne dans la valeur du champ, auquel cas c’est toujours un TEXTAREA.

C’est le code de _plugins_/crayons/action/crayons_html.php qui fait ça et qu’il est possible de surcharger localement pour modifier ce comportement, au niveau de la ligne 97.

Par exemple on peut simplement ajouter la condition suivante au test :

        OR (strlen ($valeur[$champ]) > 30)                                

En langue diff, ça donnerait :

  1. @@ -94,7 +94,8 @@
  2.  
  3. // si la valeur fait plusieurs lignes on doit mettre un textarea
  4. + // idem si la valeur fait plus de 30 caractères
  5. - // derogation specifique pour descriptif_site de spip_metas
  6. + // et derogation specifique pour descriptif_site de spip_metas
  7. if (
  8. preg_match(",[\n\r],", $valeur[$champ])
  9. OR (($champ == 'valeur') && ($id == 'descriptif_site'))
  10. + OR (strlen ($valeur[$champ]) > 30)
  11. OR
  12. // on regarde le type tel que defini dans serial

Télécharger

Nom servant d’index dans l’environnement reçu par un contrôleur

Le contrôleur reçoit un environnement avec la valeur de l’index de l’enregistrement édité, affecté à un nom qui est bien l’index de la table si la table suit les conventions de nommage élémentaires de SPIP : c’est à dire lorsque le nom du champ index est de la forme ’id_table’ et la table s’appelle ’TABLE’ ou ’TABLES’.

Si donc la table est "PLOUF’, l’index reçu a pour nom ’id_plouf’ même si le vrai champ index de la table PLOUF est « mon_idploc ». Il faudra alors dans ce cas faire le lien dans la boucle avec :
<BOUCLE(PLOUF){mon_idploc=#ENV{id_plouf}}>

Exemples d’un contrôleur unique servant à saisir les différents champs constitutifs d’une adresse

Si la table PLOUF contient en fait des adresses, voici ce que pourrait donner un contrôleur pour crayonner l’adresse.

  1. [(#REM)
  2.  
  3. Controleur pour le crayon 'plouf_detailsdeladresse' , uniquement html
  4. pour crayonner tous les champs de la table plouf qui définissent une adresse
  5.  
  6. fichier plouf_detailsdeladresse.html à mettre dans le sous-dossier controleurs du dossier squelette
  7.  
  8. appelé dans un fichier squelette par <span #EDIT{detailsdeladresse}>#NOM #PRENOM, #ASSO, #ADRESSE, #CP #VILLE - #TEL - #EMAIL #SITE</span>
  9. ]
  10. #CACHE{0}
  11. <BOUCLE_plouf(plouf){mon_idploc=#ENV{id_plouf}}>
  12. <fieldset style="width:#ENV{largeur}px;#ENV{style}">
  13. <legend>Détails de l'adresse</legend>
  14.  
  15. <label>Nom</label>
  16. <input class="crayon-active" name="#ENV{name_nom}" style="width:100%;" value="[(#NOM**|entites_html)]" />
  17.  
  18. <label>Prénom</label>
  19. <input class="crayon-active" name="#ENV{name_prenom}" style="width:100%;" value="[(#PRENOM**|entites_html)]" />
  20.  
  21. <label>Adresse</label>
  22. <textarea class="crayon-active" name="#ENV{name_adresse}" style="width:100%; height:#ENV{hauteur}|mul{2}px;">
  23. [(#ADRESSE**|entites_html)]</textarea>
  24.  
  25. <label>CP</label>
  26. <input class="crayon-active" name="#ENV{name_cp}" style="width:100%; " value="[(#CP**|entites_html)]" />
  27.  
  28. <label>Ville</label>
  29. <input class="crayon-active" name="#ENV{name_ville}" style="width:100%; " value="[(#VILLE**|entites_html)]" />
  30.  
  31. <label>Tel</label>
  32. <input class="crayon-active" name="#ENV{name_tel}" style="width:100%; " value="[(#TEL**|entites_html)]" />
  33.  
  34. <label>Email</label>
  35. <input class="crayon-active" name="#ENV{name_email}" style="width:100%; " value="[(#EMAIL**|entites_html)]" />
  36.  
  37. <label>Site</label>
  38. <input class="crayon-active" name="#ENV{name_site}" style="width:100%; " value="[(#SITE**|entites_html)]" />
  39.  
  40. [(#REM)
  41. [<pre>(#ENV**|unserialize|print_r{1})</pre>]
  42. ]
  43. </fieldset>
  44.  
  45. </BOUCLE_plouf>

Télécharger

Utiliser un datepicker dans un controleur

1. dans le controleur

  1. #CACHE{0}
  2. <BOUCLE_toto(MA_TABLE){id_ma_table}>
  3. <input class="crayon-active date" type="text" name="#ENV{name_madate}" value="[(#MADATE|affdate{d/m/Y})]">
  4. </BOUCLE_toto>
  5. #INCLURE{fond=formulaires/dateur/inc-dateur}

Télécharger

2. dans le pipeline : crayons_verifier

  1. function prefix_crayons_verifier($flux){
  2. $date = $flux['args']['content']['madate'];
  3. list($date,$heures) = explode(' ' , $date);
  4. list($jour, $mois, $annee) = explode('/',$date);
  5. $heures = ( $heures ) ? $heures : "00:00:00";
  6. $date = intval($annee) .'-'. $mois .'-'. $jour. ' ' . $heures;
  7.  
  8. $flux['data']['normaliser'] = array('madate' => $date);
  9. return $flux;
  10. }

Télécharger

3. La vue

  1. #CACHE{0}
  2. <BOUCLE_toto(MA_TABLE){id_ma_table}>
  3. [(#MADATE|affdate{d/m/Y})]
  4. </BOUCLE_toto>

Télécharger