From 2f26f866107247fe90ff29b819d60d9dfa4bc7ff Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Thu, 17 Aug 2006 07:54:49 +0000 Subject: [PATCH] le modele #LESAUTEURS n'a plus besoin d'une fonction balise_LESAUTEURS_dist(); meilleure recuperation du contexte des modeles - a noter, un truc rigolo : on a ainsi cree les balises #DOC, #IMG pour la boucle (DOCUMENTS) --- dist/modeles/lesauteurs.html | 14 ++++++++-- dist/modeles/traductions.html | 31 ++++++++++++--------- ecrire/public/balises.php | 52 ++++++++++++++--------------------- ecrire/public/references.php | 18 ++++++------ 4 files changed, 60 insertions(+), 55 deletions(-) diff --git a/dist/modeles/lesauteurs.html b/dist/modeles/lesauteurs.html index 316eb642d7..069894b2b0 100644 --- a/dist/modeles/lesauteurs.html +++ b/dist/modeles/lesauteurs.html @@ -1,2 +1,12 @@ -<BOUCLE_auteurs(AUTEURS) {id_article} {par nom} {", "}>[ -<a href="#URL_AUTEUR">(#NOM)</a>]</BOUCLE_auteurs> \ No newline at end of file +[(#REM) + + Modele pour #LESAUTEURS : + * s'il s'agit d'un article normal, on boucle sur les auteurs de l'article + * s'il s'agit d'un article syndique, on affiche la valeur du champ, + passee dans #ENV par le compilo, en la securisant avec safehtml. + +] +<BOUCLE_auteurs(AUTEURS) {id_article} {par nom} {", "}> +<a href="#URL_AUTEUR">#NOM</a></BOUCLE_auteurs> + +<BOUCLE_syndic(SYNDIC_ARTICLES) {id_syndic_article}>[(#ENV**{lesauteurs}|safehtml)]</BOUCLE_syndic> diff --git a/dist/modeles/traductions.html b/dist/modeles/traductions.html index f0d913cd82..8b0a953db3 100644 --- a/dist/modeles/traductions.html +++ b/dist/modeles/traductions.html @@ -1,13 +1,18 @@ -<BOUCLE_article(ARTICLES){id_article}> - [(#REM) Traductions de l'article ] - <B_traductions> - <div class="traductions"> - <p><:trad_article_traduction:></p> - <ul> - <BOUCLE_traductions(ARTICLES) {traduction} {par lang}> - <li lang="#LANG" xml:lang="#LANG" dir="#LANG_DIR"[ class="(#EXPOSE)"]>[<#EXPOSE{span,a href="#URL_ARTICLE"} rel="alternate" hreflang="#LANG" title="[(#LANG|traduire_nom_langue)][ : (#TITRE|couper{80}|texte_backend)]">#LANG</#EXPOSE{span,a}>]</li> - </BOUCLE_traductions> - </ul> - </div> - </B_traductions> -</BOUCLE_article> \ No newline at end of file +[(#REM) + + Modele pour les traductions d'un article + +]<BOUCLE_article(ARTICLES){id_article}> +<B_traductions> +<div class="traductions"> +<p><:trad_article_traduction:></p> +<ul><BOUCLE_traductions(ARTICLES) {traduction} {par lang}> + <li lang="#LANG" xml:lang="#LANG" dir="#LANG_DIR"[ class="(#EXPOSE)"]>[[(#EXPOSE{ + <span>, + <a href="#URL_ARTICLE" rel="alternate" hreflang="#LANG" + title="[(#LANG|traduire_nom_langue)][ - (#TITRE|texte_backend)]">} + )]#LANG#EXPOSE{</span>,</a>}]</li></BOUCLE_traductions> +</ul> +</div> +</B_traductions> +</BOUCLE_article> diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php index c780b486d3..aebaf4e8da 100644 --- a/ecrire/public/balises.php +++ b/ecrire/public/balises.php @@ -543,44 +543,32 @@ function balise_RANG_dist ($p) { } -// #LESAUTEURS -// les auteurs d'un article (ou d'un article syndique) -// http://www.spip.net/fr_article902.html -// http://www.spip.net/fr_article911.html -// http://doc.spip.org/@balise_LESAUTEURS_dist -function balise_LESAUTEURS_dist ($p) { - // Cherche le champ 'lesauteurs' dans la pile - $_lesauteurs = champ_sql('lesauteurs', $p); - - // Si le champ n'existe pas (cas de spip_articles), on donne la - // construction speciale sql_auteurs(id_article) ; - // dans le cas contraire on prend le champ 'les_auteurs' (cas de - // spip_syndic_articles) - if ($_lesauteurs AND $_lesauteurs != '$Pile[0][\'lesauteurs\']') { - $p->code = $_lesauteurs; - } else { - $p->code = "recuperer_fond( - 'modeles/lesauteurs', - array('id_article' => ".champ_sql('id_article', $p).") - )"; - } - - $p->interdire_scripts = false; // securite apposee par recuperer_fond() - return $p; -} - // #MODELE // fonction speciale d'appel a un modele modeles/truc.html pour la balise #TRUC +// exemples : #LESAUTEURS, #TRADUCTIONS, #DOC, #IMG... // http://doc.spip.org/@balise_MODELE_dist function balise_MODELE_dist($p){ + $nom = strtolower($p->nom_champ); + $contexte = array(); - $nom = strtolower($p->nom_champ); - $p->code = "recuperer_fond( - 'modeles/".$nom."', - \$GLOBALS['contexte'] - )"; + // Si le champ existe dans la pile, on le met dans le contexte + // (exemple : #LESAUTEURS dans spip_syndic_articles) + $contexte[$nom] = champ_sql($nom, $p); + + // Reserver la cle primaire de la boucle courante + if ($primary = $p->boucles[$p->id_boucle]->primary) { + $id = champ_sql($primary, $p); + $contexte[$primary] = $id; + } + + // Preparer le code du contexte (id + champ) + foreach($contexte as $var=>$code) + $contexte[$var] = "'$var' => $code"; + + $p->code = "recuperer_fond('modeles/".$nom."', + array(".join(',', $contexte)."))"; + $p->interdire_scripts = false; // securite assuree par le squelette - #$p->interdire_scripts = true; return $p; } diff --git a/ecrire/public/references.php b/ecrire/public/references.php index 148b37f5f0..113ec94084 100644 --- a/ecrire/public/references.php +++ b/ecrire/public/references.php @@ -198,13 +198,14 @@ function calculer_champ($p) { // http://doc.spip.org/@calculer_balise function calculer_balise($nom, $p) { - $f = charger_fonction($nom, 'balise', true); + // S'agit-t-il d'une balise_XXXX[_dist]() ? + if ($f = charger_fonction($nom, 'balise', true)) + return $f($p); - if ($f) return $f($p); + // S'agit-t-il d'un modele ? + if (find_in_path('modeles/'.strtolower($nom).'.html')) + return balise_MODELE_dist($p); - if(find_in_path('modeles/'.strtolower($nom).'.html')) - return balise_MODELE_dist($p); - // S'agit-il d'un logo ? Une fonction speciale les traite tous if (ereg('^LOGO_', $nom)) { $res = calculer_balise_logo($p); @@ -217,10 +218,11 @@ function calculer_balise($nom, $p) { // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour // il faut recracher {...} quand ce n'est finalement pas des args - if ($p->fonctions AND (!$p->fonctions[0][0]) AND $p->fonctions[0][1]) + if ($p->fonctions AND (!$p->fonctions[0][0]) AND $p->fonctions[0][1]) { + $code = addslashes($p->fonctions[0][1]); + $p->code .= " . '$code'"; + } - { $code = addslashes($p->fonctions[0][1]); - $p->code .= " . '$code'";} // ne pas passer le filtre securite sur les id_xxx if (strpos($nom, 'ID_') === 0) $p->interdire_scripts = false; -- GitLab