$defaut = '@$Pile[0][\'' . strtolower($nom_champ) . '\']';
}
+ $idb_origine = $idb;
+ $nom_champ_origine = $nom_champ;
+
$i = 0;
if (strlen($explicite)) {
// Recherche d'un champ dans un etage superieur
if ($select and !in_array($t, $boucles[$idb]->select)) {
$boucles[$idb]->select[] = $t;
}
+ // renseigner la boucle source de ce champ pour les traitements
+ $boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
$champ = '$Pile[$SP' . ($i ? "-$i" : "") . '][\'' . $c . '\']';
if (!$joker) {
return index_compose($conditionnel, $champ);
if (is_array($ps)) {
// Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
$idb = index_boucle($p);
+ // si le champ a ete trouve dans une boucle parente sa source est renseignee ici
+ if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
+ $idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
+ }
+
// mais on peut aussi etre hors boucle. Se mefier.
$type_requete = isset($p->boucles[$idb]->type_requete) ? $p->boucles[$idb]->type_requete : false;
$table_sql = isset($p->boucles[$idb]->show['table_sql']) ? $p->boucles[$idb]->show['table_sql'] : false;
// bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
if ($type_requete and isset($GLOBALS['table_des_tables'][$type_requete])) {
+ $type_alias = $type_requete;
$type_requete = $GLOBALS['table_des_tables'][$type_requete];
+ } else {
+ $type_alias = false;
}
// le traitement peut n'etre defini que pour une table en particulier "spip_articles"
} // ou pour une boucle en particulier "DATA","articles"
elseif ($type_requete and isset($ps[$type_requete])) {
$ps = $ps[$type_requete];
+ } // ou pour une boucle utilisant un alias ("hierarchie")
+ elseif ($type_alias and isset($ps[$type_alias])) {
+ $ps = $ps[$type_alias];
} // ou pour indifféremment quelle que soit la boucle
elseif (isset($ps[0])) {
$ps = $ps[0];