Skip to content
Extraits de code Groupes Projets
Valider 2c16d186 rédigé par esj's avatar esj
Parcourir les fichiers

balise N:C sans pré-traitements (Paolo)

parent e8c11653
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -57,6 +57,7 @@ class Boucle { ...@@ -57,6 +57,7 @@ class Boucle {
class Champ { class Champ {
var $type = 'champ'; var $type = 'champ';
var $nom_champ; var $nom_champ;
var $nom_boucle; // seulement si boucle explicite
var $cond_avant, $cond_apres; // tableaux d'objets var $cond_avant, $cond_apres; // tableaux d'objets
var $fonctions; // filtre explicites var $fonctions; // filtre explicites
var $etoile; var $etoile;
...@@ -80,15 +81,13 @@ class Champ { ...@@ -80,15 +81,13 @@ class Champ {
// Si ca reference un champ SQL, on le memorise dans la structure $boucles // 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 *') // 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; global $exceptions_des_tables, $table_des_tables, $tables_principales;
// Recherche d'un champ dans un etage superieur
$i = 0; $i = 0;
if ($c=strpos($nom_champ, ':')) { if ($$explicite) {
$idbs = substr($nom_champ, 0, $c); // Recherche d'un champ dans un etage superieur
$nom_champ = substr($nom_champ, $c+1); while (($idb != $explicite) && $idb) {
while (($idb != $idbs) && $idb) {
$i++; $i++;
$idb = $boucles[$idb]->id_parent; $idb = $boucles[$idb]->id_parent;
} }
...@@ -159,37 +158,39 @@ function champ_sql($champ, $p) { ...@@ -159,37 +158,39 @@ function champ_sql($champ, $p) {
# Retourne une EXPRESSION php # Retourne une EXPRESSION php
function calculer_champ($p) { function calculer_champ($p) {
$nom_champ = $p->nom_champ;
// regarder s'il existe une fonction personnalisee balise_NOM() // regarder s'il existe une fonction personnalisee balise_NOM()
$f = 'balise_' . $p->nom_champ; $f = 'balise_' . $nom_champ;
if (function_exists($f)) if (function_exists($f))
$p = $f($p); $p = $f($p);
else { else {
// regarder s'il existe une fonction standard balise_NOM_dist() // 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)) if (function_exists($f))
$p = $f($p); $p = $f($p);
else { else {
// S'agit-il d'un logo ? Une fonction speciale les traite tous // 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); $p = calcul_balise_logo($p);
else { else {
// On regarde ensuite s'il y a un champ SQL homonyme, // On regarde ensuite s'il y a un champ SQL homonyme,
// et on definit le type et les traitements // et on definit le type et les traitements
$p->code = champ_sql($p->nom_champ, $p); $p->code = index_pile($p->id_boucle, $nom_champ, $p->boucles, $p->explicite);
if (($p->code) && ($p->code != '$Pile[0][\''.$p->nom_champ.'\']')) { if (($p->code) && ($p->code != '$Pile[0][\''.$nom_champ.'\']')) {
// Par defaut basculer en numerique pour les #ID_xxx // 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 { else {
// si index_pile a ramene le choix par defaut, // si index_pile a ramene le choix par defaut,
// ca doit plutot etre un champ SPIP non SQL, // ca doit plutot etre un champ SPIP non SQL,
// ou ni l'un ni l'autre => on le renvoie sous la forme brute '#TOTO' // 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 $p->statut = 'php'; // pas de traitement
}}}} }}}}
......
...@@ -10,7 +10,7 @@ define("_INC_HTML_SQUEL", "1"); ...@@ -10,7 +10,7 @@ define("_INC_HTML_SQUEL", "1");
# pour permettre differentes syntaxes en entree # pour permettre differentes syntaxes en entree
define(NOM_DE_BOUCLE, "[0-9]+|[-_][-_.a-zA-Z0-9]*"); 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(CHAMP_ETENDU, '\[([^]\[]*)\(' . NOM_DE_CHAMP . '([^]\[)]*)\)([^]\[]*)\]');
define(PARAM_DE_BOUCLE,'\{[^}]*\}'); define(PARAM_DE_BOUCLE,'\{[^}]*\}');
define(TYPE_DE_BOUCLE, "[^)]*"); define(TYPE_DE_BOUCLE, "[^)]*");
...@@ -73,12 +73,12 @@ function parser_champs($texte) { ...@@ -73,12 +73,12 @@ function parser_champs($texte) {
$result = array_merge($result, $result = array_merge($result,
parser_texte(substr($texte, 0, $p))); parser_texte(substr($texte, 0, $p)));
} }
$texte = $regs[6];
$champ = new Champ; $champ = new Champ;
$champ->nom_champ = $regs[1]; $champ->nom_boucle = $regs[2];
$champ->etoile = $regs[5]; $champ->nom_champ = $regs[3];
$champ->etoile = $regs[4];
$texte = $regs[5];
$result[] = $champ; $result[] = $champ;
} }
if (!$texte) if (!$texte)
...@@ -123,17 +123,13 @@ function parser_champs_interieurs($texte, $sep, $nested) { ...@@ -123,17 +123,13 @@ function parser_champs_interieurs($texte, $sep, $nested) {
$i = 0; $i = 0;
while (ereg(CHAMP_ETENDU . '(.*)$', $texte, $regs)) { while (ereg(CHAMP_ETENDU . '(.*)$', $texte, $regs)) {
$fonctions = $regs[7];
$champ = new Champ; $champ = new Champ;
$champ->nom_champ = $regs[2]; $champ->nom_boucle = $regs[3];
$champ->nom_champ = $regs[4];
// installer les processeurs standards (cf inc-balises.php3) $champ->etoile = $regs[5];
$champ->etoile = $regs[6];
$champ->cond_avant = parser_champs_exterieurs($regs[1],$sep,$nested); $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) { if ($fonctions) {
$fonctions = explode('|', ereg_replace("^\|", "", $fonctions)); $fonctions = explode('|', ereg_replace("^\|", "", $fonctions));
foreach($fonctions as $f) $champ->fonctions[]= $f; foreach($fonctions as $f) $champ->fonctions[]= $f;
...@@ -153,7 +149,7 @@ function parser_champs_interieurs($texte, $sep, $nested) { ...@@ -153,7 +149,7 @@ function parser_champs_interieurs($texte, $sep, $nested) {
} }
} }
$result[$i++] = $champ; $result[$i++] = $champ;
$texte = $regs[9]; $texte = $regs[8];
} }
if ($texte) { $result[$i++] = $texte;} if ($texte) { $result[$i++] = $texte;}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter