Citations

All contributions published for previous SPIP versions

Pour ’habiller’ les citations d’un auteur...

deuxième version

Voici une autre fonction proposant un autre style de notation :

function citation ($letexte, $style = '', $tag = '/') {
 if(ereg("cit_tag=(.)",$letexte,$regs)) {
  $tag = $regs[1];
  $letexte = str_replace($regs[0], '', $letexte);
 }
 if(!$style OR !is_string($style)) $style = 'spip_cite';
 $regexp = "$tag$tag(([^$tag]+)$tag?([^$tag]+)?$tag?([^$tag]+)?$tag?([^$tag]+)?)$tag$tag";
 while(ereg($regexp, $letexte, $regs)) {
  $la_citation = trim($regs[2]);
  $l_auteur = trim($regs[3]);
  $la_source = trim($regs[4]);
  $le_style = trim($regs[5]);
  if($le_style) $style=$le_style;
  $terme = "<blockquote class=\"$style\">";
  if($l_auteur) $terme .= "<cite class=\"$style\">".$l_auteur."</cite>&nbsp;:<br>";
  $terme .= $la_citation;
  if($la_source) $terme .= "<div class=\"$style\">".$la_source."</div>";
  $terme .= "</blockquote>";
  $letexte = str_replace($regs[0], $terme, $letexte);
 }
 return $letexte;
}

Dans l’article, le rédacteur utilisera la notation :

//La Citation/Auteur/Source/Style//

Sachant que Auteur, Source et Style sont optionnels mais que l’ordre est important. Exemples :

//La Citation// affiche une citation sans auteur ni source, en employant le style par défaut.

//La Citation/Auteur// affiche une citation avec auteur mais sans source, en employant le style par défaut.

//La Citation//Source// affiche une citation sans auteur mais avec une source, en employant le style par défaut. (à noter qu’il FAUT 2 slashes (//) pour séparer la citation de la source)

//La Citation///ze_style// affiche une citation sans auteur ni source, en employant les styles ’*.ze_style’, à condition qu’ils soient définis quelquepart (feuille de style ou balise //La Citation///ze_style// . (à noter qu’il FAUT 2 slashes (///) pour séparer la citation du style)

D’autre part, il lui sera possible de définir lui-même le caractère de détection des citations en saisisant dans son texte :

cit_tag=X où X peut-être un caractère quelconque. Exemple :

Si le rédacteur ne veut pas de ’/’ comme caractère de détection, il peut faire :

cit_tag=#
##La citation##

Dans le squelette, le webmestre aura la possibilité de paramétrer :

[(#TEXTE|citation{ze_style, ze_tag})]. Les styles css utilisés par défaut seront ’*.ze_style’ et le caractères de détection de la citation sera ’ze_tag’ (un seul caractère). Sinon, les valeurs par défaut sont .cite_spip pour les styles et ’/’ pour le caractère de détection

Il faudra définir les styles par défaut (dans ’spip_style.css’, par exemple) :

blockquote.spip_cite { ... } #bloc de la citation
cite.spip_cite { ... } #bloc de l'auteur
div.spip_cite { ... } #bloc de la source

... et éventuellement, définir des style pour que les rédacteurs puissent varier les plaisirs :

blockquote.ze_style { ... } #bloc de la citation
cite.ze_style { ... } #bloc de l'auteur
div.ze_style { ... } #bloc de la source

blockquote.anozer_style { ... } #bloc de la citation
cite.anozer_style { ... } #bloc de l'auteur
div.anozer_style { ... } #bloc de la source

...etc...

article initial

On peut utiliser du code html dans son article de la manière suivante :

 <html>
  <blockquote style="border: 1px solid black; background-color: #eee; padding: 10px;">
   <cite style="font-weight: bold; text-decoration: underline;">
    Auteur
   </cite>
   :<br>Citation
   <div style="vertical-align: bottom; text-align: right;">Source</div>
  </blockquote>
 </html>

Mais comme le propre de spip est de permettre la rédaction sans forcément connaitre les astuces du langage du web, voici un filtre :

/*
 *   +----------------------------------+
 *    Nom du Filtre :    citation
 *   +----------------------------------+
 *    Date : mercredi 4 juin 2003
 *    Auteur :  James      + klike@firstream.net                                      
 *   +-------------------------------------+
 *    Fonctions de ce filtre :
 *     'habille' une citation avec un style prédéfini
 *   +-------------------------------------+ 
 *  
 * Pour toute suggestion, remarque, proposition d'ajout
 * reportez-vous au forum de l'article :
 * http://www.uzine.net/spip_contrib/article.php3?id_article=NumeroDeVotreArticle
*/

function citation ($letexte) {
 global $flag_pcre;
 if (!$flag_pcre) die('Emploi de fonction interdite');
 $regexp_echap = "/<cit(e|ation)?(.*?)>(.*?)<\/cit(e|ation)?>/si";

 while(preg_match($regexp_echap, $letexte, $regs)) {
  $num_echap++;
  $les_echap[$num_echap] = "<blockquote class=\"spip\">";
  if (eregi("de=\"([^\"]*)\"", $regs[2], $elem)) {
   $les_echap[$num_echap] .= "<cite class=\"spip\">de ".$elem[1]."</cite>&nbsp;:<br>";
  }
  $les_echap[$num_echap] .= $regs[3];
  if (eregi("source=\"([^\"]*)\"", $regs[2], $elem)) {
   $les_echap[$num_echap] .= "<div class=\"source\">Source : ".$elem[1]."</div>";
  }
  $pos = strpos($letexte, $regs[0]);
  $letexte = substr($letexte,0,$pos)."___SPIP_cit$num_echap ___"
   .substr($letexte,$pos+strlen($regs[0]));
 }

 while(ereg("___SPIP_cit([0-9]+) ___", $letexte, $match)) {
  $lenum = $match[1];
  $cherche = $match[0];
  $pos = strpos($letexte, $cherche);
  $letexte = substr($letexte, 0, $pos). $les_echap[$lenum] . substr($letexte, $pos + strlen($cherche));
 }

 return $letexte;
}
// FIN du Filtre citation

dans la feuille de style (spip_style, par exemple) :

cite.spip { font-weight: bold; text-decoration: underline; }
blockquote.spip { border: 1px solid black; background-color: #eee; padding: 10px; }
div.source { vertical-align: bottom; text-align: right;}

dans les squelettes, on applique le filtre :

[(#TEXTE|citation)]

et enfin, dans son article, ou une brève, il sera possible de faire :

<cit de="Auteur" source="Source">Citation</cit>

ce qui aura pour effet :

de Auteur :
Citation
Source : Source

Discussion

One discussion

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom