From 2c16d186b44cf83ea3ebe7f10ba6e3e51c6c6066 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Wed, 8 Sep 2004 06:19:42 +0000 Subject: [PATCH] =?UTF-8?q?balise=20N:C=20sans=20pr=C3=A9-traitements=20(P?= =?UTF-8?q?aolo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc-compilo-index.php3 | 27 ++++++++++++++------------- inc-html-squel.php3 | 26 +++++++++++--------------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/inc-compilo-index.php3 b/inc-compilo-index.php3 index 199321d509..9572ba85b0 100644 --- a/inc-compilo-index.php3 +++ b/inc-compilo-index.php3 @@ -57,6 +57,7 @@ class Boucle { class Champ { var $type = 'champ'; var $nom_champ; + var $nom_boucle; // seulement si boucle explicite var $cond_avant, $cond_apres; // tableaux d'objets var $fonctions; // filtre explicites var $etoile; @@ -80,15 +81,13 @@ class Champ { // Si ca reference un champ SQL, on le memorise dans la structure $boucles // afin de construire un requete SQL minimale (plutot qu'un brutal 'SELECT *') -function index_pile($idb, $nom_champ, &$boucles) { +function index_pile($idb, $nom_champ, &$boucles, $explicite='') { global $exceptions_des_tables, $table_des_tables, $tables_principales; - // Recherche d'un champ dans un etage superieur $i = 0; - if ($c=strpos($nom_champ, ':')) { - $idbs = substr($nom_champ, 0, $c); - $nom_champ = substr($nom_champ, $c+1); - while (($idb != $idbs) && $idb) { + if ($$explicite) { + // Recherche d'un champ dans un etage superieur + while (($idb != $explicite) && $idb) { $i++; $idb = $boucles[$idb]->id_parent; } @@ -159,37 +158,39 @@ function champ_sql($champ, $p) { # Retourne une EXPRESSION php function calculer_champ($p) { + $nom_champ = $p->nom_champ; + // regarder s'il existe une fonction personnalisee balise_NOM() - $f = 'balise_' . $p->nom_champ; + $f = 'balise_' . $nom_champ; if (function_exists($f)) $p = $f($p); else { // regarder s'il existe une fonction standard balise_NOM_dist() - $f = 'balise_' . $p->nom_champ . '_dist'; + $f = 'balise_' . $nom_champ . '_dist'; if (function_exists($f)) $p = $f($p); else { // S'agit-il d'un logo ? Une fonction speciale les traite tous - if (ereg('^LOGO_', $p->nom_champ)) + if (ereg('^LOGO_', $nom_champ)) $p = calcul_balise_logo($p); else { // On regarde ensuite s'il y a un champ SQL homonyme, // et on definit le type et les traitements - $p->code = champ_sql($p->nom_champ, $p); - if (($p->code) && ($p->code != '$Pile[0][\''.$p->nom_champ.'\']')) { + $p->code = index_pile($p->id_boucle, $nom_champ, $p->boucles, $p->explicite); + if (($p->code) && ($p->code != '$Pile[0][\''.$nom_champ.'\']')) { // Par defaut basculer en numerique pour les #ID_xxx - if (substr($p->nom_champ,0,3) == 'ID_') $p->statut = 'num'; + if (substr($nom_champ,0,3) == 'ID_') $p->statut = 'num'; } else { // si index_pile a ramene le choix par defaut, // ca doit plutot etre un champ SPIP non SQL, // ou ni l'un ni l'autre => on le renvoie sous la forme brute '#TOTO' - $p->code = "'#" . $p->nom_champ . "'"; + $p->code = "'#" . $nom_champ . "'"; $p->statut = 'php'; // pas de traitement }}}} diff --git a/inc-html-squel.php3 b/inc-html-squel.php3 index 9695a474e9..0e82016c27 100644 --- a/inc-html-squel.php3 +++ b/inc-html-squel.php3 @@ -10,7 +10,7 @@ define("_INC_HTML_SQUEL", "1"); # pour permettre differentes syntaxes en entree define(NOM_DE_BOUCLE, "[0-9]+|[-_][-_.a-zA-Z0-9]*"); -define(NOM_DE_CHAMP, "#(((" . NOM_DE_BOUCLE . "):)?([A-Z_]+))(\*?)"); +define(NOM_DE_CHAMP, "#((" . NOM_DE_BOUCLE . "):)?([A-Z_]+)(\*?)"); define(CHAMP_ETENDU, '\[([^]\[]*)\(' . NOM_DE_CHAMP . '([^]\[)]*)\)([^]\[]*)\]'); define(PARAM_DE_BOUCLE,'\{[^}]*\}'); define(TYPE_DE_BOUCLE, "[^)]*"); @@ -73,12 +73,12 @@ function parser_champs($texte) { $result = array_merge($result, parser_texte(substr($texte, 0, $p))); } - $texte = $regs[6]; $champ = new Champ; - $champ->nom_champ = $regs[1]; - $champ->etoile = $regs[5]; - + $champ->nom_boucle = $regs[2]; + $champ->nom_champ = $regs[3]; + $champ->etoile = $regs[4]; + $texte = $regs[5]; $result[] = $champ; } if (!$texte) @@ -123,17 +123,13 @@ function parser_champs_interieurs($texte, $sep, $nested) { $i = 0; while (ereg(CHAMP_ETENDU . '(.*)$', $texte, $regs)) { - $fonctions = $regs[7]; $champ = new Champ; - $champ->nom_champ = $regs[2]; - - // installer les processeurs standards (cf inc-balises.php3) - - $champ->etoile = $regs[6]; - + $champ->nom_boucle = $regs[3]; + $champ->nom_champ = $regs[4]; + $champ->etoile = $regs[5]; $champ->cond_avant = parser_champs_exterieurs($regs[1],$sep,$nested); - $champ->cond_apres = parser_champs_exterieurs($regs[8],$sep,$nested); - + $champ->cond_apres = parser_champs_exterieurs($regs[7],$sep,$nested); + $fonctions = $regs[6]; if ($fonctions) { $fonctions = explode('|', ereg_replace("^\|", "", $fonctions)); foreach($fonctions as $f) $champ->fonctions[]= $f; @@ -153,7 +149,7 @@ function parser_champs_interieurs($texte, $sep, $nested) { } } $result[$i++] = $champ; - $texte = $regs[9]; + $texte = $regs[8]; } if ($texte) { $result[$i++] = $texte;} -- GitLab