[spip-dev] une balise "balise" ?

Hello,
  Je me suis penché sur l'idée d'une balise #BALISE, qui permettrait
par exemple de faire #BALISE{#ENV{machin}} pour afficher une balise dont
le nom serait déterminé au dernier moment.
  Ça serait intéressant pour laisser à l'utilisateur le choix des
colonnes qu'il veut afficher dans un tableau.

  Sauf que pour ça, il faut que la colonne demandée soit dispo dans la
requète de la boucle courante. Hors, cette requète ne contient (en
gros) que ce qui est demandé par les appels à champ_sql()

  Je ne vois donc pas comment coder ça ...

  Une idée ?

Pas question d'implémenter ça: le compilateur détermine les champs SQL effectivement utiles à un squelette afin de produire une requête SQL minimale. Si on introduit ça, ça veut dire soit qu'il faut recompiler à chaque coup, soit qu'il faut faire "SELECT *" sur toutes les tables systématiquement. Autrement dit, on grève les performances de tous les cas pour introduire un cas hyper rare. Ne te penche plus, tu vas tomber :wink:

Committo,Ergo:Sum

christian lefebvre a écrit :

Hello,
  Je me suis penché sur l'idée d'une balise #BALISE, qui permettrait
par exemple de faire #BALISE{#ENV{machin}} pour afficher une balise dont
le nom serait déterminé au dernier moment.
  

heu, je dis peut etre une betise, mais #ENV{#ENV{truc}}, ca repond pas à ton besoin ?

Pas question d'implémenter ça

J'm'y attendais un peu :slight_smile:

Si on introduit ça, ça veut dire soit qu'il faut
recompiler à chaque coup, soit qu'il faut faire "SELECT *" sur toutes
les tables systématiquement. Autrement dit, on grève les performances
de tous les cas pour introduire un cas hyper rare.

  On peut ajouter un select='*' dans l'appel à cette balise pour ne
le faire que si c'est utile.

  En fait, je viens d'obtenir un truc "qui marche", mais uniquement
dans le cas d'une boucle sur une table unique, et en ne faisant
référence qu'à des colonnes de cette boucle :

function balise_BALISE($p) {
  static $etoile= false;
  if(!$etoile) {
    $b= $p->boucles[$p->id_boucle];
    $b->select=$b->type_requete.'.*';
    $etoile= true;
  }
  $balise = interprete_argument_balise(1,$p);
  $p->code = '$Pile[$SP]['.$balise.']';

  return $p;
}

  On peut ajouter des alias.* pour chaque entrée du $b->from mais
ça implique pas mal de contraintes. Il faut notamment que chaque table
soit référencée explicitement AVANT pour peupler le from, et il y a
surement d'autres effets indésirables ...
  Bref, à ne pas mettre entre toutes les mains :slight_smile:

christian lefebvre a écrit :

Hello,
  Je me suis penché sur l'idée d'une balise #BALISE, qui permettrait
par exemple de faire #BALISE{#ENV{machin}} pour afficher une balise dont
le nom serait déterminé au dernier moment.
  Ça serait intéressant pour laisser à l'utilisateur le choix des
colonnes qu'il veut afficher dans un tableau.

  Sauf que pour ça, il faut que la colonne demandée soit dispo dans la
requète de la boucle courante. Hors, cette requète ne contient (en
gros) que ce qui est demandé par les appels à champ_sql()

  Je ne vois donc pas comment coder ça ...

  Une idée ?
  

Ah ah bien sur oui !
C'est Forms&tables qu'il te faut :stuck_out_tongue:
Sans rire hein ...
Une boucle sur les champs ca pemet de choisir ses champs avec un critere au moment de l'execution, et hop ...
Bon, si ta table est deja codée en dur (table physique) ca va se compliquer ...
Cedric

christian lefebvre a écrit :
> Hello,
> Je me suis penché sur l'idée d'une balise #BALISE, qui permettrait
> par exemple de faire #BALISE{#ENV{machin}} pour afficher une balise dont
> le nom serait déterminé au dernier moment.
> Ça serait intéressant pour laisser à l'utilisateur le choix des
> colonnes qu'il veut afficher dans un tableau.
>
> Sauf que pour ça, il faut que la colonne demandée soit dispo dans la
> requète de la boucle courante. Hors, cette requète ne contient (en
> gros) que ce qui est demandé par les appels à champ_sql()
>
> Je ne vois donc pas comment coder ça ...
>
> Une idée ?
>
Ah ah bien sur oui !
C'est Forms&tables qu'il te faut :stuck_out_tongue:

heu ... comment dire ... :slight_smile:

Bon, si ta table est deja codée en dur (table physique) ca va se
compliquer ...

Hélas, c'est là qu'est l'os
Y'en a même une quinzaine, avec des relations entre elles (mais rien
de sexuel, j'vous rassure :wink: