Browse Source

On filtre les niveaux directement dans la variable transmise au modèle, plutôt que dans le modèle.

En effet, le nombre d'entrées est utilisé dans le nom de la classe du sommaire, si on filtre dans la boucle, le résultat est faussé.
svn/root/tags/v1.2.5
tcharlss@bravecassine.com 6 years ago
parent
commit
ec6fa671c0
  1. 5
      modeles/sommaire.html
  2. 2
      paquet.xml
  3. 35
      sommaire_fonctions.php

5
modeles/sommaire.html

@ -2,12 +2,11 @@
[(#CONFIG{sommaire_automatique_numerote}|=={on}|oui)
#SET{liste, '#'}
]
#SET{niveau_max,#ENV{niveau_max}|intval|sinon{6}}
<B_somm>
<div class="well nav-sommaire nav-sommaire-[(#ENV{sommaire}|count)]">
<h2><:sommaire:titre_cadre_sommaire:></h2>
<BOUCLE_somm(POUR){tableau #ENV{sommaire}}><BOUCLE_filtrer(CONDITION){si #VALEUR{niveau}|<={#GET{niveau_max}}}>
-[(#GET{liste}|str_pad{#VALEUR{niveau},#GET{liste}})] [#VALEUR{id}<-][#VALEUR{titre}->#VALEUR{href}]</BOUCLE_filtrer></BOUCLE_somm>
<BOUCLE_somm(POUR){tableau #ENV{sommaire}}>
-[(#GET{liste}|str_pad{#VALEUR{niveau},#GET{liste}})] [#VALEUR{id}<-][#VALEUR{titre}->#VALEUR{href}]</BOUCLE_somm>
</div>
</B_somm>
#FILTRE{propre}

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="sommaire"
categorie="edition"
version="1.2.0"
version="1.2.1"
etat="stable"
compatibilite="[3.0.0;3.1.*]"
logo="prive/themes/spip/images/sommaire-64.png"

35
sommaire_fonctions.php

@ -189,6 +189,8 @@ function sommaire_filtre($texte, $ajoute=true, $sommaire_seul=false, $niveau_max
// à défaut on prend la valeur enregistrée dans la config
$niveau_max_config = isset($GLOBALS['meta']['sommaire_niveau_max']) ? $GLOBALS['meta']['sommaire_niveau_max'] : '';
$niveau_max = (intval($niveau_max) > 0) ? $niveau_max : $niveau_max_config;
// on filtre les entrées du sommaire selon le niveau max
$sommaire = sommaire_filtrer_niveaux($sommaire, $niveau_max);
if ($ajoute OR $sommaire_seul){
// on cherche les balises <sommaire>, mais aussi <sommaireN|arg=x|arg=y> et [sommaire]
@ -299,4 +301,37 @@ function sommaire_intertitre_ancre($titre, $h, $ancres_vues=array()){
}
return "$ancre-$i";
}
/**
* Retire d'un sommaire les entrées d'une profondeur supérieures à un niveau donné
*
* @param array $sommaire
* tableau associatif des entrées du sommaire
* @param int $niveau_max
* niveau de profondeur maximal
* @return array
* tableau associatif des entrées du sommaire expurgé de certaines entrées
*/
function sommaire_filtrer_niveaux($sommaire, $niveau_max=''){
$niveau_max = intval($niveau_max);
if (
$niveau_max <= 0
OR $niveau_max > 5
)
return $sommaire;
foreach ($sommaire as $k => $v) {
if (
isset($v['niveau'])
AND is_int($v['niveau'])
AND $v['niveau'] > $niveau_max
) {
unset($sommaire[$k]);
}
}
return $sommaire;
}
?>
Loading…
Cancel
Save