[spip-dev] Balise #BIDULE et champ du même nom

Bien le bonjour,

    Je travaille sur une base de données externe qui gère une bibliothèque. Ils m'ont foutu des noms de table et de champs n'importe comment, mais bon, il y a un champ qui s'appelle notes. Et #NOTES, définie dans public/balises.php , entre en conflit. Enfin c'est ce que j'en déduis, parceque même si je mets le nom de la boucle dedans, il ne me sélectionne pas le champ notes:

<BOUCLE_ex(bibr:EXEMPLAIRE){numcat=#_cat:NUM}>

<http://ens.math.univ-montp2.fr/SPIP/spip.php?page=ouvrage&ouvrage=minimal+surfaces&var_mode=debug&var_mode_objet=html_856aad073fe030073b0da635ee4b6fa9_ex&var_mode_affiche=boucle#T6c2244a889bf9a428e397b20800f226a&gt;&lt;li&gt; #NUM #_ex:NOTES [<span title="#ISUSUEL" style="background-color: (#ISUSUEL|=={'empruntable'}|?{'#0f0','#f00'})">&nbsp;&nbsp;</span>]
</li>

</BOUCLE_ex>

me donne cette requête mysql:

SELECT exemplaire.num, exemplaire.isusuel, exemplaire.etat

  F <http://ens.math.univ-montp2.fr/SPIP/spip.php?page=ouvrage&ouvrage=minimal+surfaces&var_mode=debug&var_mode_objet=html_856aad073fe030073b0da635ee4b6fa9_ex&var_mode_affiche=resultat#Tb91f6779eecfbf90993ba6c702d48c3c&gt;ROM EXEMPLAIRE AS exemplaire
  <http://ens.math.univ-montp2.fr/SPIP/spip.php?page=ouvrage&ouvrage=minimal+surfaces&var_mode=debug&var_mode_objet=html_856aad073fe030073b0da635ee4b6fa9_ex&var_mode_affiche=resultat#Tb91f6779eecfbf90993ba6c702d48c3c&gt;WHERE (exemplaire.numcat = '18331')

Comment faire pour l'obliger à sélectionner le champ notes? Bon, ce n'est pas un bug de #NOTES vu qu'il n'y a pas grand chose dans cette fonction:

// http://doc.spip.org/@balise_NOTES_dist
function balise_NOTES_dist($p) {
    // Recuperer les notes
    $p->code = 'calculer_notes()';
    #$p->interdire_scripts = true;
    return $p;
}

Des idées? Je n'ai pas épluché le code qui décide de la magie qui est opérée pour savoir quoi mettre derrière #BIDULE...

Merci,
Ch. M.

Comment faire pour l'obliger à sélectionner le champ notes? Bon, ce

qqch comme ça dans mes_options devrait marcher (pas testé)

function balise_NOTES($p) {
  if ($p->nom_boucle)
    return champ_sql($p->nom_champ, $p);
  else {
     // Recuperer les notes
     $p->code = 'calculer_notes()';
     #$p->interdire_scripts = true;
     return $p;
  }
}

Committo,Ergo:Sum

Bah c'est justement ce que faisait le code que je proposais,

Oui, mais ce que je propose est que le traitement *global* des balises, puisse bénéficier de votre amélioration, pas que ça soit fait au cas par cas par un webmestre qui touche (enfin dis sans me vanter hein :wink: ):
Qu'il y ait un moyen simple pour que, quand spip se demande quoi mettre derrière #BIDULE, qu'il regarde *d'abord* s'il y a un champ mysql avec ce nom là et ensuite s'il y a une fonction.
Je veux dire plus simple que surcharger balise_BIDULE_dist, ce qui n'est pas à la portée du premier venu. Par exemple, quand on spécifie le nom de la boucle: #_ma_table:BIDULE qu'il regarde *d'abord* dans une des tables associées à la boucle avant de chercher la fonction. Ou alors avoir la notation #BIDULE* ou qq chose comme ça. Je comprends bien qu'il ne faut pas systématiquement empêcher l'appel à la fonction sinon on perd le contrôle, mais il faut que le webmestre de base n'ait pas à comprendre le php qu'il y a derrière.

pourquoi ce besoin d'etre "brutal" ?

En l'occurence je pouvais me permettre d'être brutal parceque je n'utilise pas le #NOTES de la distrib dans ce squelette, et que cette fonction est chargée dans un fichier de fonctions attaché au squelette.

Cordialement, Ch. M.