Choix du squelette selon la longueur de l’article
Objectif :
Dans un site déjà ancien et donc comprenant un grand nombre d’articles
la présentation se fait sur trois colonnes :
- celle de droite comporte le menu et différents liens ;
- celle gauche différentes illustrations ;
- Celle du milieu affiche l’article.
Pour un article court tout est bien équilibré mais pour un article long la page s’étire démesurément. Afin d’éviter cet ennui a été envisagé de faire une présentation en deux colonnes (suppression de la colonne de droite) Mais pour les articles courts la page apparaît plutôt vide. Il faudrait conserver la présentation en trois colonnes beaucoup plus agréable. D’où la nécessité de disposer de 2 types de squelettes : une pour les articles longs l’autre pour les articles courts.
On pouvait choisir le squelettes par mots clefs mais ce n’était pas commode : il fallait attribuer un mot clef à chaque article : quel travail ! ! !
Mieux déterminer automatiquement la longueur de l’article et orienter le choix en fonction du résultat du calcul était évidemment une solution alléchante.
Solutions proposées
Principe
L’article appelle un squelette intermédiaire « article.html » qui calcule la longueur du texte de la page à afficher et choisit en conséquence le squelette : « articlelong.html » ou « articlecourt.html »
Ce traitement peut se faire en php ou en SPIP pur (sans php) Nous proposons donc les deux solutions.
Nous ne donnons ici que les codes pour « article.html » chacun réalisant « articlelong.html » et « articlecourt.html » selon ses besoins et ses goûts.
<BOUCLE_article_principal(ARTICLES) {id_article}>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html dir="#LANG_DIR" lang="#LANG">
<head>
<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#INTRODUCTION|couper{150}|textebrut)" />]
</head>
[(#REM) Appel squelette articlecourt ou articlelong selon la longueur de l'article.
Avec ENV on transmet le parametre de pagination, et on gere correctement la cache]
<?php
/* détermination de la longueur du texte */
$A=[(#TEXTE|textebrut|strlen)];
/* choix de la longueur de changement de squelette */
$b=3000;
if ($A<$b){
?>
<INCLURE{fond=articlecourt}{id_article}{env=#ENV}{lang}>
<?php
}else{
?>
<INCLURE{fond=articlelong}{id_article}{env=#ENV}{lang}>
<?php
}
?>
<//B_variante>
</html>
</BOUCLE_article_principal>
REMARQUES :
- La modification de $b=3000 change la longueur de l’article qui produit la permutation de squelette
- Les ordres en php sont classiques et ne demandent pas de commentaires : un calcul de longueur de texte puis un test : if else.
<BOUCLE_article_principal(ARTICLES) {id_article}>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html dir="#LANG_DIR" lang="#LANG">
<head>
<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#INTRODUCTION|couper{150}|textebrut)" />]
</head>
[(#REM) Appel squelette articlecourt ou articlelong selon la longueur de l'article.
Avec ENV on transmet le parametre de pagination, et on gere correctement la cache]
#SET{N,(#TEXTE|textebrut|strlen)}
[(#GET{N}|>{2500}|?{' ',''})
<INCLURE{fond=articlelong}{id_article}{env=#ENV}{lang}>]
[(#GET{N}|>{2500}|?{'',' '})
<INCLURE{fond=articlecourt}{id_article}{env=#ENV}{lang}>]
<//B_variante>
</html>
</BOUCLE_article_principal>
REMARQUES :
- #SET donne à la valeur N la longueur du texte que la ligne suivante affiche (un contrôle qui peut être supprimé)
- puis un premier test réalisé par |>{2500}?{' ',''}
cf.filtretest
- puis un second test comparable au premier :
le code situé entre ) et ] n’est pris en compte que si la
balise renvoie quelque chose ici un espace ’ ’
Ainsi si N>2500 est vrai c’est le premier test qui est valide et le premier INCLURE est pris en considération et pas le second puisque pour le second on n’a pas d’espace : on a ''
et non ' '
(idem pour le second)
- Ici la valeur de changement de squelette est 2500 valeur modifiable.
Ces deux programmes ont été testés avec les versions SPIP 1.9.1 et 1.9.2a ; Ils doivent fonctionner sur toutes les versions qui gèrent les différentes fonctions utilisées.
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 : |