Appliquer ce filtre sur toutes les formes d’intertitres
[Erreur...3]Cette dernière nécessite de redéfinir les intertitres en <h2>...</h2>
[Erreur...5]Si le titre comporte des caractères non translittérable, on met ancreX (X étant le numéros de l’intertitre), de même si le titre est de moins de 2 caractères.
function ancres_intertitre($texte) {
$regexp = "/{{{(.*?)}}}/";
$texte = preg_replace_callback($regexp,'remplace_intertitre',$texte);
$texte = avant_propre_ancres($texte); //on est obligé de le refaire ici, parce que dans inc_texte, c'est fait avant l'apel à avant_propre, bizarre.
return $texte;
}
function remplace_intertitre ($matches) {
static $cId = 0;
global $sommaire_intertitre;
$cId++;
$url = translitteration(corriger_caracteres(
supprimer_tags(supprimer_numero(extraire_multi($matches[1])))
));
$url = @preg_replace(',[[:punct:][:space:]]+,u', ' ', $url);
// S'il reste des caracteres non latins, utiliser l'id a la place
if (preg_match(",[^a-zA-Z0-9 ],", $url)) {
$url = "ancre$cId";
}
else {
$mots = explode(' ', $url);
$url = '';
foreach ($mots as $mot) {
if (!$mot) continue;
$url2 = $url.'-'.$mot;
if (strlen($url2) > 35) {
break;
}
$url = $url2;
}
$url = substr($url, 1);
//echo "$url<br>";
if (strlen($url) < 2) $url = "ancre$cId";
}
$sommaire_intertitre[$url] = $matches[1];
return '{{{ ['.$url.'<-] '.$matches[1].' }}}';
}
Puis dans le fichier mes_options.php3 :
- si la fonction avant_propre n’existe pas, ajouter :
function avant_propre($texte) { $texte = ancres_intertitre($texte); return $texte; }
- sinon, ajouter :
$texte = ancres_intertitre($texte);
juste après la ligne
function avant_propre($texte) {
De plus, à placer dans mes_fonctions.php3 cette fois :
[Erreur...11] function compose($tableau)
$texte = ’’ ;
foreach($tableau as $url => $lien)
$texte .= «
" ;
return $texte ?"
- « .$texte. »
« : »" ;
[Erreur...13]à revoir : l’utilisation d’une variable globale : éventuellement passer par une static dans une fonction appelée soit pour la composition, soit pour l’affichage. (à la mode de l’agenda_memo)
et aussi. ça marche que si on affiche #TEXTE avant #SOMMAIRE_INTERTITRE, donc, faut trouver une solution plus générique
(Stephane Deschamps) Tu as raison, c’est plus propre, et surtout ça génère du spip-code et pas un truc hybride comme notre contrib. Bien vu.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Suivre les commentaires : |