VarianteContrib Ajouter-des-ID-aux-intertitres

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.

    Dernière modification de cette page le 6 mars 2007

    Discussion

    Aucune discussion

    Ajouter un commentaire

    Qui êtes-vous ?

    Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

    Ajoutez votre commentaire ici

    Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

    Ajouter un document

    Suivre les commentaires : RSS 2.0 | Atom