Version 8 — Novembre 2020 — JLuc
On trouvera ici
- des compléments de documentation
- des exemples de contrôleurs et vues
- Un exemple d’utilisation du datepicker
Les crayons peuvent être utilisés, dans une boucle sur une table non déclarée à SPIP.
C’est transparent et il n’y a rien à coder au moins lorsque la table a un nom habituel pour SPIP avec un s à la fin du nom de la table. (Il est aussi conseillé en général, mais non nécessaire pour les crayons, que le nom de la clé primaire soit composé de ’id_’ suivi du nom de la table au singulier.)
Dans des cas particuliers, il est possible de définir une fonction revision_typobjet ou typobjet_revision pour gérer l’enregistrement des valeurs. Cette fonction reçoit 3 arguments :
- $id : l’identifiant de l’enregistrement à modifier (valeur de la clé primaire)
- $colval : tableau de couples (champ, nouvelle valeur)
- $type : nom de la table, sans le s
Exemple :
function revision_spip_theme($id, $colval, $type) {
sql_updateq($type.'s', $colval, "id_theme=".intval($id));
}
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 :
@@ -94,7 +94,8 @@
// si la valeur fait plusieurs lignes on doit mettre un textarea
+ // idem si la valeur fait plus de 30 caractères
- // derogation specifique pour descriptif_site de spip_metas
+ // et derogation specifique pour descriptif_site de spip_metas
if (
preg_match(",[\n\r],", $valeur[$champ])
OR (($champ == 'valeur') && ($id == 'descriptif_site'))
+ OR (strlen ($valeur[$champ]) > 30)
OR
// on regarde le type tel que defini dans serial
Le contrôleur reçoit une variable d’environnement avec la valeur de l’index de l’enregistrement édité. Le nom de cette variable est toujours de la forme ’id_table’ lorsque la table s’appelle ’TABLE’ ou ’TABLES’. C’est donc bien l’index de la table si la table suit les conventions de nommage élémentaires de SPIPmais ça ne l’est pas sinon .
Mais si la table ne suit pas les conventions de nommage de SPIP, l’index reçu n’est pas le bon et il faut donc définir un contrôleur sur mesure. Exemple : si 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_rahlala mon_idploc ". Dans ce dernier cas, il faudra faire le lien dans la boucle avec :
<BOUCLE(PLOUF){mon_idploc_rahlala=#ENV{id_plouf}} <BOUCLE(PLOUF){mon_idploc=#ENV{id_plouf}} >
Ce squelette implémente Si la table PLOUF contient en fait des adresses , voici ce que pourrait donner un contrôleur pour le crayon </ code>detailsdeladresse</code > qui permet de modifier les champs des adresses enregistrées dans la table < code>adresses</code >. crayonner l’adresse .
[(#REM)
Pour activer ce contrôleur
- Il faut le mettre dans le sous-dossier controleur
du dossier squelette.
- Dans le squelette qui affiche l’adresse, il faut encadrer le code qui affiche l’adresse par les balises #EDIT appelant le contrôleur.
Controleur pour le crayon ’plouf_detailsdeladresse’ , uniquement html
pour crayonner tous les champs de la table plouf qui définissent une adresse
fichier plouf_detailsdeladresse.Par exemple html à mettre dans le sous-dossier controleurs du dossier squelette
appelé dans un fichier squelette par
<code class=’spip ’>
<span span #EDITdetailsdeladresse >
#NOM EDITdetailsdeladresse>#NOM #PRENOM, #ASSO ,
#ADRESSE,
#CP #VILLE -
#TEL -
#EMAIL #SITE
</ span SITE</span >
</code > ]
#CACHE0