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
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+7 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -719,12 +719,16 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='')
				$boucles[$id]->type_requete = '';
				$x = $boucles[$id]->sql_serveur;
				$x = $x ? "$x:$type" : $type;
				// 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);
				}
			}
		}
	}
	// Commencer par reperer les boucles appelees explicitement 
	// car elles indexent les arguments de maniere derogatoire
	foreach($boucles as $id => $boucle) { 
+1 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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();
+7 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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);