Skip to content
Extraits de code Groupes Projets
Valider fbd4d091 rédigé par marcimat's avatar marcimat
Parcourir les fichiers

Permettre aux boucles SPIP de ne pas raler si la table demandée est...

Permettre aux boucles SPIP de ne pas raler si la table demandée est introuvable. Pour cela, il faut ajouter un ? juste avant la fin de parenthèse : <BOUCLE_nom(TABLE?)>, <BOUCLE_nom(TABLE jointure?)> ou encore <BOUCLE_nom(TABLE ?)>

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)>
]
parent 934e3609
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -719,9 +719,13 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='') ...@@ -719,9 +719,13 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='')
$boucles[$id]->type_requete = ''; $boucles[$id]->type_requete = '';
$x = $boucles[$id]->sql_serveur; $x = $boucles[$id]->sql_serveur;
$x = $x ? "$x:$type" : $type; $x = $x ? "$x:$type" : $type;
erreur_squelette(_T('zbug_table_inconnue', // ne pas renvoyer d'erreur si la table est optionnelle
array('table' => $x )), // declare par ? avant ) dans <BOUCLE_A(table ?)>
$id); if (!$boucles[$id]->table_optionnelle) {
erreur_squelette(_T('zbug_table_inconnue',
array('table' => $x )),
$id);
}
} }
} }
} }
......
...@@ -44,6 +44,7 @@ class Boucle { ...@@ -44,6 +44,7 @@ class Boucle {
var $avant, $milieu, $apres, $altern; var $avant, $milieu, $apres, $altern;
var $lang_select; var $lang_select;
var $type_requete; var $type_requete;
var $table_optionnelle = false; # si ? dans <BOUCLE_x(table ?)>
var $sql_serveur = ''; var $sql_serveur = '';
var $param = array(); var $param = array();
var $criteres = array(); var $criteres = array();
......
...@@ -25,7 +25,7 @@ define('BALISE_POST_BOUCLE', '</B'); ...@@ -25,7 +25,7 @@ define('BALISE_POST_BOUCLE', '</B');
define('BALISE_ALT_BOUCLE', '<//B'); define('BALISE_ALT_BOUCLE', '<//B');
define('TYPE_RECURSIF', 'boucle'); 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]*"); define('NOM_DE_BOUCLE', "[0-9]+|[-_][-_.a-zA-Z0-9]*");
# ecriture alambiquee pour rester compatible avec les hexadecimaux des vieux squelettes # 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})"); 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) { ...@@ -575,11 +575,16 @@ function public_phraser_html($texte, $id_parent, &$boucles, $nom, $ligne=1) {
$milieu = substr($milieu, strlen($match[0])); $milieu = substr($milieu, strlen($match[0]));
$type = $match[1]; $type = $match[1];
$jointures = trim($match[2]); $jointures = trim($match[2]);
$table_optionnelle = ($match[3]);
if ($jointures) { if ($jointures) {
$result->jointures = preg_split("/\s+/",$jointures); $result->jointures = preg_split("/\s+/",$jointures);
$result->jointures_explicites = $jointures; $result->jointures_explicites = $jointures;
} }
if ($table_optionnelle){
$result->table_optionnelle = true;
}
if ($p = strpos($type, ':')) if ($p = strpos($type, ':'))
{ {
$result->sql_serveur = substr($type,0,$p); $result->sql_serveur = substr($type,0,$p);
......
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