From fbd4d09117abc4b042d4c3b534d194744f79d9ad Mon Sep 17 00:00:00 2001 From: Matthieu Marcillaud <marcimat@rezo.net> Date: Fri, 14 Dec 2007 00:50:48 +0000 Subject: [PATCH] =?UTF-8?q?Permettre=20aux=20boucles=20SPIP=20de=20ne=20pa?= =?UTF-8?q?s=20raler=20si=20la=20table=20demand=C3=A9e=20est=20introuvable?= =?UTF-8?q?.=20Pour=20cela,=20il=20faut=20ajouter=20un=20=3F=20juste=20ava?= =?UTF-8?q?nt=20la=20fin=20de=20parenth=C3=A8se=20:=20<BOUCLE=5Fnom(TABLE?= =?UTF-8?q?=3F)>,=20<BOUCLE=5Fnom(TABLE=20jointure=3F)>=20ou=20encore=20<B?= =?UTF-8?q?OUCLE=5Fnom(TABLE=20=3F)>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cela permet aux squelettes qui utilisent un plugin optionnel ayant créé table X de ne pas signaler par une erreur l'absence de cette table dans une boucle si le plugin n'a pas été installé. <BOUCLE_plugin(X ?)>#BALISE</BOUCLE_plugin> </B_plugin> Texte affiché si X n'est pas présent ou si la boucle n'a pas d'élément <//B_plugin> Il était déjà possible d'obtenir à peu près le même comportement (sauf le texte sur l'absence d'élément) en utilisant la balise plugin et une noisette : [(#PLUGIN{prefixe_plugin}|?{' ',''}) <INCLURE(fond=squelette_contenant_la_boucle)> ] --- ecrire/public/compiler.php | 10 +++++++--- ecrire/public/interfaces.php | 1 + ecrire/public/phraser_html.php | 9 +++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php index 6ed69bf0a2..34127ef6d7 100644 --- a/ecrire/public/compiler.php +++ b/ecrire/public/compiler.php @@ -719,9 +719,13 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='') $boucles[$id]->type_requete = ''; $x = $boucles[$id]->sql_serveur; $x = $x ? "$x:$type" : $type; - erreur_squelette(_T('zbug_table_inconnue', - array('table' => $x )), - $id); + // ne pas renvoyer d'erreur si la table est optionnelle + // declare par ? avant ) dans <BOUCLE_A(table ?)> + if (!$boucles[$id]->table_optionnelle) { + erreur_squelette(_T('zbug_table_inconnue', + array('table' => $x )), + $id); + } } } } diff --git a/ecrire/public/interfaces.php b/ecrire/public/interfaces.php index 2fdfd9b977..c3a205805f 100644 --- a/ecrire/public/interfaces.php +++ b/ecrire/public/interfaces.php @@ -44,6 +44,7 @@ class Boucle { var $avant, $milieu, $apres, $altern; var $lang_select; var $type_requete; + var $table_optionnelle = false; # si ? dans <BOUCLE_x(table ?)> var $sql_serveur = ''; var $param = array(); var $criteres = array(); diff --git a/ecrire/public/phraser_html.php b/ecrire/public/phraser_html.php index 330c56a9e0..1f527f1854 100644 --- a/ecrire/public/phraser_html.php +++ b/ecrire/public/phraser_html.php @@ -25,7 +25,7 @@ define('BALISE_POST_BOUCLE', '</B'); define('BALISE_ALT_BOUCLE', '<//B'); define('TYPE_RECURSIF', 'boucle'); -define('SPEC_BOUCLE','/\s*\(\s*([^\s)]+)(\s*[^)]*)\)/'); +define('SPEC_BOUCLE','/\s*\(\s*([^\s?)]+)(\s*[^)?]*)([?]?)\)/'); define('NOM_DE_BOUCLE', "[0-9]+|[-_][-_.a-zA-Z0-9]*"); # ecriture alambiquee pour rester compatible avec les hexadecimaux des vieux squelettes define('NOM_DE_CHAMP', "#((" . NOM_DE_BOUCLE . "):)?(([A-F]*[G-Z_][A-Z_0-9]*)|[A-Z_]+)(\*{0,2})"); @@ -575,11 +575,16 @@ function public_phraser_html($texte, $id_parent, &$boucles, $nom, $ligne=1) { $milieu = substr($milieu, strlen($match[0])); $type = $match[1]; $jointures = trim($match[2]); + $table_optionnelle = ($match[3]); if ($jointures) { $result->jointures = preg_split("/\s+/",$jointures); $result->jointures_explicites = $jointures; } - + + if ($table_optionnelle){ + $result->table_optionnelle = true; + } + if ($p = strpos($type, ':')) { $result->sql_serveur = substr($type,0,$p); -- GitLab