SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Navigation > Liens > Archives Liens

VarianteContrib Ajouter-des-ID-aux-intertitres

lundi 24 octobre 2005. Dernier ajout mardi 6 mars 2007



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 .= "

  • ".$lien."
  • " ; 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.


    Répondre à cet article



    Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net