Changeset 90360 in spip-zone


Ignore:
Timestamp:
Jun 19, 2015, 2:59:36 PM (4 years ago)
Author:
tcharlss@…
Message:

Possibilité de limiter le niveau de profondeur des menus.
On peut gérer ça de façon globale, via une nouvelle option dans le formulaire de configuration.
On peut aussi agir au cas par cas :

  • Nouveau paramètre optionnel pour la balise à insérer dans les squelettes : #SOMMAIRE{#TEXTE,N}
  • Nouveau paramètre optionnel pour la balise à insérer dans le texte : <sommaire|niveau_max=N>

N est le nombre de niveaux, de 1 à 6

Location:
_plugins_/sommaire/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/sommaire/trunk/formulaires/configurer_sommaire.html

    r81126 r90360  
    5656                                </div>
    5757                        </li>
     58
     59                        #SET{name,sommaire_niveau_max}#SET{obli,''}#SET{defaut,'6'}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     60                        <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     61                                <label>[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>
     62                                <p class="explication"><:sommaire:explication_niveau_max:></p>[
     63                                <span class='erreur_message'>(#GET{erreurs})</span>
     64                                ]
     65                                #SET{val,1}
     66                                <div class="choix">
     67                                        <input type="radio" name="#GET{name}" class="radio" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)checked="checked"] />
     68                                        <label for="#GET{name}_#GET{val}">[(#GET{fl}|concat{':label_',#GET{name},'_',#GET{val}}|_T)]</label>
     69                                </div>
     70                                #SET{val,2}
     71                                <div class="choix">
     72                                        <input type="radio" name="#GET{name}" class="radio" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)checked="checked"] />
     73                                        <label for="#GET{name}_#GET{val}">[(#GET{fl}|concat{':label_',#GET{name},'_',#GET{val}}|_T)]</label>
     74                                </div>
     75                                #SET{val,3}
     76                                <div class="choix">
     77                                        <input type="radio" name="#GET{name}" class="radio" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)checked="checked"] />
     78                                        <label for="#GET{name}_#GET{val}">[(#GET{fl}|concat{':label_',#GET{name},'_',#GET{val}}|_T)]</label>
     79                                </div>
     80                                #SET{val,4}
     81                                <div class="choix">
     82                                        <input type="radio" name="#GET{name}" class="radio" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)checked="checked"] />
     83                                        <label for="#GET{name}_#GET{val}">[(#GET{fl}|concat{':label_',#GET{name},'_',#GET{val}}|_T)]</label>
     84                                </div>
     85                                #SET{val,5}
     86                                <div class="choix">
     87                                        <input type="radio" name="#GET{name}" class="radio" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)checked="checked"] />
     88                                        <label for="#GET{name}_#GET{val}">[(#GET{fl}|concat{':label_',#GET{name},'_',#GET{val}}|_T)]</label>
     89                                </div>
     90                                #SET{val,6}
     91                                <div class="choix">
     92                                        <input type="radio" name="#GET{name}" class="radio" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)checked="checked"] />
     93                                        <label for="#GET{name}_#GET{val}">[(#GET{fl}|concat{':label_',#GET{name},'_',#GET{val}}|_T)]</label>
     94                                </div>
     95                        </li>
     96
    5897                </ul>
    5998
  • _plugins_/sommaire/trunk/lang/sommaire_fr.php

    r81126 r90360  
    33
    44if (!defined('_ECRIRE_INC_VERSION')) return;
    5  
     5
    66$GLOBALS[$GLOBALS['idx_lang']] = array(
    77
     
    1313        'cfg_exemple_explication' => 'Explication de cet exemple',
    1414        'cfg_titre_parametrages' => 'Paramétrages',
     15
     16        // E
     17        'explication_niveau_max' => 'Profondeur maximale des sommaires. Cette valeur peut être changée au cas par cas via l\'utilisation de la balise <code>#SOMMAIRE{#TEXTE,2}</code> dans les squelettes, ou <code>&lt;sommaire|niveau_max=2&gt;</code> dans le texte des articles.',
    1518
    1619        // L
     
    2528        'label_sommaire_automatique_numerote_off' => 'liste à puces',
    2629        'label_sommaire_automatique_numerote_on' => 'liste numérotée',
     30        'label_sommaire_niveau_max' => 'Profondeur',
     31        'label_sommaire_niveau_max_1' => '1 niveau',
     32        'label_sommaire_niveau_max_2' => '2 niveaux',
     33        'label_sommaire_niveau_max_3' => '3 niveaux',
     34        'label_sommaire_niveau_max_4' => '4 niveaux',
     35        'label_sommaire_niveau_max_5' => '5 niveaux',
     36        'label_sommaire_niveau_max_6' => '6 niveaux',
    2737
    2838        // T
  • _plugins_/sommaire/trunk/modeles/sommaire.html

    r81126 r90360  
    33        #SET{liste, '#'}
    44]
     5#SET{niveau_max,#ENV{niveau_max}|intval|sinon{6}}
    56<B_somm>
    67<div class="well nav-sommaire nav-sommaire-[(#ENV{sommaire}|count)]">
    78        <h2><:sommaire:titre_cadre_sommaire:></h2>
    8         <BOUCLE_somm(POUR){tableau #ENV{sommaire}}>
    9 -[(#GET{liste}|str_pad{#VALEUR{niveau},#GET{liste}})] [#VALEUR{id}<-][#VALEUR{titre}->#VALEUR{href}]</BOUCLE_somm>
     9        <BOUCLE_somm(POUR){tableau #ENV{sommaire}}><BOUCLE_filtrer(CONDITION){si #VALEUR{niveau}|<={#GET{niveau_max}}}>
     10-[(#GET{liste}|str_pad{#VALEUR{niveau},#GET{liste}})] [#VALEUR{id}<-][#VALEUR{titre}->#VALEUR{href}]</BOUCLE_filtrer></BOUCLE_somm>
    1011</div>
    1112</B_somm>
  • _plugins_/sommaire/trunk/paquet.xml

    r87136 r90360  
    22        prefix="sommaire"
    33        categorie="edition"
    4         version="1.1.2"
     4        version="1.2.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
     
    1111        <nom>Sommaire automatique</nom>
    1212
    13         <!-- cette balise peut être présente plusieurs fois s'il y a plusieurs auteurs --> 
     13        <!-- cette balise peut être présente plusieurs fois s'il y a plusieurs auteurs -->
    1414        <auteur lien="http://contrib.spip.net/auteur5384">Cédric</auteur>
    1515        <credit lien="http://contrib.spip.net/auteur6809">James</credit>
  • _plugins_/sommaire/trunk/sommaire_fonctions.php

    r88516 r90360  
    3838 * pour ajouter les ancres de sommaire sur les intertitres d'un texte
    3939 * (enleve aussi le sommaire eventuellement genere automatiquement)
    40  * 
     40 *
    4141 * @param string $texte
    4242 * @return string
     
    5757function balise_SOMMAIRE_dist($p){
    5858        $_texte = interprete_argument_balise(1,$p);
    59 
    60         $p->code = "sommaire_empile_note().affiche_sommaire($_texte).sommaire_depile_note()";
     59        $_niveau_max = interprete_argument_balise(2,$p);
     60        $_niveau_max = ($_niveau_max?$_niveau_max:"''");
     61
     62        $p->code = "sommaire_empile_note().affiche_sommaire($_texte,$_niveau_max).sommaire_depile_note()";
    6163        $p->interdire_scripts = false; // le contenu vient d'un modele
    6264        return $p;
     
    7779 * @return string
    7880 */
    79 function affiche_sommaire($texte){
     81function affiche_sommaire($texte,$niveau_max=''){
     82
    8083        // retirer le(s) sommaire(s) eventuel(s) deja la avant de re-calculer le sommaire
    81         return sommaire_post_propre(retire_sommaire($texte), $ajoute=true, $sommaire_seul=true);
     84        return sommaire_post_propre(retire_sommaire($texte), $ajoute=true, $sommaire_seul=true, $niveau_max);
    8285}
    8386
     
    111114
    112115function sommaire_propre($texte, $connect, $env){
     116        // on cherche les balises <sommaire>, mais aussi <sommaireN|arg=x|arg=y> et [sommaire]
     117        $has_sommaire = preg_match("/[<\[]sommaire(\d+)?(?:\|.*)*[>\]]/",$texte);
     118        // le niveau maximal peut être passé en paramètre de la balise <sommaire|niveau_max=N>
     119        $niveau_max = (preg_match("/[<\[]sommaire.*niveau_max=(\d).*[>\]]/", $texte, $m)) ? $m[1] : '';
     120
    113121        $texte = propre($texte,$connect,$env);
     122
    114123        if (
    115124                !isset($GLOBALS['meta']['sommaire_automatique'])
    116125                OR $GLOBALS['meta']['sommaire_automatique']=="on"
    117126                OR ($GLOBALS['meta']['sommaire_automatique']=="ondemand" AND
    118                 (strpos($texte,"<sommaire>")!==false OR strpos($texte,"[sommaire]")!==false))
     127                $has_sommaire)
    119128        ){
    120                 $texte = sommaire_post_propre($texte);
     129                $texte = sommaire_post_propre($texte,tru,false,$niveau_max);
    121130        }
    122131        return $texte;
     
    174183}
    175184
    176 function sommaire_filtre($texte, $ajoute=true, $sommaire_seul=false){
     185function sommaire_filtre($texte, $ajoute=true, $sommaire_seul=false, $niveau_max=''){
    177186        $sommaire = sommaire_recenser($texte);
    178187
     188        // le niveau max peut être passé en paramètre (via la balise texte ou squelette)
     189        // à défaut on prend la valeur enregistrée dans la config
     190        $niveau_max_config = isset($GLOBALS['meta']['sommaire_niveau_max']) ? $GLOBALS['meta']['sommaire_niveau_max'] : '';
     191        $niveau_max = (intval($niveau_max) > 0) ? $niveau_max : $niveau_max_config;
     192
    179193        if ($ajoute OR $sommaire_seul){
    180                 $sommaire = recuperer_fond("modeles/sommaire",array('sommaire'=>$sommaire));
     194                // on cherche les balises <sommaire>, mais aussi <sommaireN|arg=x|arg=y> et [sommaire]
     195                $pattern = "/[<\[]sommaire(\d+)?(?:\|.*)*[>\]]/";
     196                $sommaire = recuperer_fond("modeles/sommaire",array('sommaire'=>$sommaire,'niveau_max'=>$niveau_max));
    181197                $sommaire = "<!--sommaire-->$sommaire<!--/sommaire-->";
    182198                if ($sommaire_seul)
    183199                        return $sommaire;
    184                 if ($p = strpos($texte,"<sommaire>") OR $p = strpos($texte,"[sommaire]")){
     200                if (preg_match($pattern, $texte)) {
     201                        $texte = preg_replace($pattern, $sommaire, $texte);
     202                }
     203                /*if ($p = strpos($texte,"<sommaire>") OR $p = strpos($texte,"[sommaire]")){
    185204                        $texte = substr_replace($texte,$sommaire,$p,strlen("<sommaire>"));
    186                 }
     205                }*/
    187206                else
    188207                        $texte = $sommaire . $texte;
     
    192211}
    193212
    194 function sommaire_post_propre($texte, $ajoute=true, $sommaire_seul=false){
     213function sommaire_post_propre($texte, $ajoute=true, $sommaire_seul=false, $niveau_max=''){
     214
    195215        if (strpos($texte, '<h')!==false)
    196                 $texte = sommaire_filtre_texte_echappe($texte,'sommaire_filtre','html|code|cadre|frame|script|acronym|cite',array($ajoute,$sommaire_seul));
     216                $texte = sommaire_filtre_texte_echappe($texte,'sommaire_filtre','html|code|cadre|frame|script|acronym|cite',array($ajoute,$sommaire_seul,$niveau_max));
    197217        elseif ($sommaire_seul)
    198218                return '';
Note: See TracChangeset for help on using the changeset viewer.