Valider 8902c9a3 rédigé par Fil's avatar Fil
Parcourir les fichiers

etend le critere {recherche} de maniere a ce qu'il cherche dans le contexte...

etend le critere {recherche} de maniere a ce qu'il cherche dans le contexte (demande par #832); au passage on peut faire <#INCLURE{fond=x}{recherche=NNN}> mais aussi <BOUCLE_t(ARTICLES){recherche #ENV{autre}}>  (je n'ai pas reussi a faire une syntaxe {recherche=#ENV{autre}} qui eut ete plus intuitive).
parent 4cc2db26
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+6 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -885,6 +885,12 @@ function requete_hash ($rech) {
function prepare_recherche($recherche, $primary = 'id_article', $id_table='articles',$nom_table='spip_articles', $cond=false) {
	static $cache = array();
	static $fcache = array();

	// si recherche n'est pas dans le contexte, on va prendre en globals
	// ca permet de faire des inclure simple.
	if (!isset($recherche) AND isset($GLOBALS['recherche']))
		$recherche = $GLOBALS['recherche'];

	// traiter le cas {recherche?}
	if ($cond AND !strlen($recherche))
		return array("''" /* as points */, /* where */ '1');
+1 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -347,10 +347,7 @@ function balise_TOTAL_BOUCLE_dist($p) {
// Si on est hors d'une boucle {recherche}, ne pas "prendre" cette balise
// http://doc.spip.org/@balise_POINTS_dist
function balise_POINTS_dist($p) {
	if ($p->boucles[$p->nom_boucle ? $p->nom_boucle : $p->id_boucle]->hash)
	return rindex_pile($p, 'points', 'recherche');
	else
		return NULL;
}

// http://doc.spip.org/@balise_POPULARITE_ABSOLUE_dist
+8 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -130,7 +130,7 @@ function critere_fragment_dist($idb, &$boucles, $crit) {
}


// {recherche}
// {recherche} ou {recherche susan}
// http://www.spip.net/@recherche
// http://doc.spip.org/@critere_recherche_dist
function critere_recherche_dist($idb, &$boucles, $crit) {
@@ -140,10 +140,15 @@ function critere_recherche_dist($idb, &$boucles, $crit) {
	if (in_array($t,$table_des_tables))
		$t = "spip_$t";

	if (isset($crit->param[0]))
		$quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
	else
		$quoi = '$Pile[0]["recherche"]';

	// Ne pas executer la requete en cas de hash vide
	$boucle->hash = '
	// RECHERCHE
	list($rech_select, $rech_where) = prepare_recherche($GLOBALS["recherche"], "'.$boucle->primary.'", "'.$boucle->id_table.'", "'.$t.'", "'.$crit->cond.'");
	list($rech_select, $rech_where) = prepare_recherche('.$quoi.', "'.$boucle->primary.'", "'.$boucle->id_table.'", "'.$t.'", "'.$crit->cond.'");
	';

	// Sauf si le critere est conditionnel {recherche ?}
+14 −17
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -546,25 +546,22 @@ function rindex_pile($p, $champ, $motif)
	$b = $p->id_boucle;
	$p->code = '';
	while ($b != '') {
	if ($s = $p->boucles[$b]->param) {
	  foreach($s as $v) {
		if (strpos($v[1][0]->texte,$motif) !== false) {
		foreach($p->boucles[$b]->criteres as $critere) {
			if ($critere->op == $motif) {
				$p->code = '$Pile[$SP' . (($n==0) ? "" : "-$n") .
					"]['$champ']";
				$b = '';
		  break;
		}
				break 2;
			}
		}
		$n++;
		$b = $p->boucles[$b]->id_parent;
	}
	if (!$p->code) {
		erreur_squelette(_T('zbug_champ_hors_motif',
			array('champ' => '#' . strtoupper($champ),
				'motif' => $motif)
		), $p->id_boucle);
	}

	// si on est hors d'une boucle de {recherche}, cette balise est vide
	if (!$p->code)
		$p->code = "''";

	$p->interdire_scripts = false;
	return $p;
}