Skip to content
Extraits de code Groupes Projets
Valider 7f31f0b1 rédigé par esj's avatar esj
Parcourir les fichiers

Généralisation des critères conditionnnels: lorsque la valeur présente est un...

Généralisation des critères conditionnnels: lorsque la valeur présente est un tableau, le critère généré est '''In''' plutot que '''='''.

Application immédiate aux flux RSS dans les squelettes ''article'' et ''rubrique'', qui offrent une syndication fondée sur les mots-clés de l'article ou de la rubrique, et une autre fondée sur les auteurs de l'article. Autrement dit, le premier cas construit un flux alimenté par tous les articles ayant au moins un mot-clé commun avec l'article dont on vient de visiter la page. Idem pour les auteurs.

A noter que Firefox & Opéra gèrent bien la présence de plusieurs flux dans une page, en demandant de choisir, tandis que Safari ne voit que le premier.
parent af177dc5
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -4,6 +4,12 @@
<head>
<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#INTRODUCTION|couper{150}|attribut_html)" />]
<link rel="alternate" type="application/rss+xml"
title="<:titre_page_mots_tous:>"
href="[(#URL_PAGE{backend})]<BOUCLE_URLMOT(MOTS){id_article}>&amp;id_mot[]=#ID_MOT</BOUCLE_URLMOT>" />
<link rel="alternate" type="application/rss+xml"
title="<:icone_auteurs:>"
href="[(#URL_PAGE{backend})]<BOUCLE_URLAUTEURS(AUTEURS){id_article}>&amp;id_auteur[]=#ID_AUTEUR</BOUCLE_URLAUTEURS>" />
<INCLURE{fond=inc-head}>
</head>
......
......@@ -22,12 +22,12 @@ version="1.0"[ encoding="(#CHARSET)"]?>
</image>
]
<BOUCLE_10recents(ARTICLES) {lang ?}{branche ?}{id_mot ?}
<BOUCLE_10recents(ARTICLES) {lang ?}{branche ?}{id_mot ?}{id_auteur ?}
{par date}{inverse}{0,10}{unique}>
<INCLURE{fond=inc-rss-item}{id_article}>
</BOUCLE_10recents>
<BOUCLE_tres_recents(ARTICLES){lang ?}{branche ?}{id_mot ?}
<BOUCLE_tres_recents(ARTICLES){lang ?}{branche ?}{id_mot ?}{id_auteur ?}
{par date}{inverse}{age<3}{unique}>
<INCLURE{fond=inc-rss-item}{id_article}>
</BOUCLE_tres_recents>
......
......@@ -10,6 +10,9 @@
<INCLURE{fond=inc-head}>
[(#REM) Lien vers le flux RSS de la rubrique ]
<link rel="alternate" type="application/rss+xml" title="<:syndiquer_rubrique:>" href="[(#URL_PAGE{backend}|parametre_url{id_rubrique,#ID_RUBRIQUE})]" />
<link rel="alternate" type="application/rss+xml"
title="<:titre_page_mots_tous:>"
href="[(#URL_PAGE{backend})]<BOUCLE_URLMOT(MOTS){id_rubrique}>&amp;id_mot[]=#ID_MOT</BOUCLE_URLMOT>" />
</head>
<body class="page_rubrique">
......
......@@ -261,7 +261,7 @@ function parametre_url($url, $c, $v=NULL, $sep='&amp;') {
$regexp = ',^(' . $c . ')(=.*)?$,';
$ajouts = array_flip(explode('|',$c));
$u = rawurlencode($v);
$u = is_array($v) ? $v : rawurlencode($v);
// lire les variables et agir
foreach ($url as $n => $val) {
if (preg_match($regexp, urldecode($val), $r)) {
......
......@@ -595,9 +595,20 @@ function kwote($lisp)
// http://doc.spip.org/@critere_IN_dist
function critere_IN_dist ($idb, &$boucles, $crit)
{
static $cpt = 0;
list($arg, $op, $val, $col)= calculer_critere_infixe($idb, $boucles, $crit);
$in = critere_IN_cas($idb, $boucles, $crit->not ? 'NOT' : '', $arg, $op, $val, $col);
// inserer la condition; exemple: {id_mot ?IN (66, 62, 64)}
$boucles[$idb]->where[] = !$crit->cond ? $in :
array("'?'",
calculer_argument_precedent($idb, $col, $boucles),
$in,
"''");
}
function critere_IN_cas ($idb, &$boucles, $crit2, $arg, $op, $val, $col)
{
static $cpt = 0;
$var = '$in' . $cpt++;
$x= "\n\t$var = array();";
foreach ($val as $k => $v) {
......@@ -619,23 +630,17 @@ function critere_IN_dist ($idb, &$boucles, $crit)
$boucles[$idb]->in .= $x;
// inserer la negation (cf !...)
if (!$crit->not) {
$boucles[$idb]->default_order[] = "'cpt$cpt'";
$op = '<>';
} else $op = '=';
if ($crit2==='NOT')
$op = '=';
else {
if (!$crit2)$boucles[$idb]->default_order[] = "'cpt$cpt'";
$op = '<>';
}
$arg = "((sql_quote($var)===\"''\") ? 0 : ('FIELD($arg,' . sql_quote($var) . ')'))";
$boucles[$idb]->select[]= "\" . $arg . \" AS cpt$cpt";
$op = array("'$op'", $arg, 0);
// inserer la condition; exemple: {id_mot ?IN (66, 62, 64)}
$boucles[$idb]->where[]= (!$crit->cond ? $op :
array("'?'",
calculer_argument_precedent($idb, $col, $boucles),
$op,
"''"));
if ($crit2 !== 'COND')
$boucles[$idb]->select[]= "\" . $arg . \" AS cpt$cpt";
return array("'$op'", $arg, 0);
}
......@@ -658,8 +663,13 @@ function calculer_critere_DEFAUT($idb, &$boucles, $crit)
if (tester_param_date('articles', $col))
$pred = '@$Pile["env"][\'' . $col ."']";
else $pred = calculer_argument_precedent($idb, $col, $boucles);
$where = array("'?'", $pred, $where,"''");
if ($op == '=' AND !$crit->not)
$where = array("'?'", "(is_array($pred))",
critere_IN_cas ($idb, $boucles, 'COND', $arg, $op, array($pred), $col),
$where);
$where = array("'?'", "!$pred","''", $where);
}
spip_log("$arg, $op, $val[0], $col " . $crit->not);
$boucles[$idb]->where[]= $where;
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter