Le problème
En assurant une formation sur spip auprès d’instituteurs du Maine et Loire il m’a été posé un problème pour lequel je n’avais pas de solution :
- Certaines rubriques qui étaient consacrées aux horaires de l’école devaient être capables de présenter les 2 ou 3 articles qu’elles contenaient sans aucun lire la suite ou lien vers d’autres articles ;
- De plus grosses rubriques qui contenaient des articles plus volumineux et plus nombreux sur les travaux de leurs élèves ne devaient présenter qu’une introduction de ces articles avec les liens lire la suite classiques.
Le souci était que le choix d’un squelette pour la présentation d’une rubrique était unique et ce qui était adapté pour l’un ne l’était plus pour l’autre...
Utiliser des squelettes spécifiques aux rubriques ne faisaient que repousser le problème à plus tard et demande plus de difficultés pour la maintenance du site.
Il n’y a qu’une seule rubrique.html alors comment faire ?
Le début de la solution
Neoram m’a montré une solution simple à ce problème - loin de moi l’idée de prétendre donc qu’elle est de moi ; cet article se borne à essayer de la présenter de la façon la plus claire possible.
En fonction d’un mot clé associé à une rubrique on appellera tel ou tel squelette.
On va donc créer 3 squelettes
- Deux squelettes pour les deux présentation spécifiques (horaire ou travaux)
- Un squelette par défaut si aucun mot clé n’a été choisi
1. sous_rubrique-horaire.html
<BOUCLE_rub(RUBRIQUES){id_rubrique}>
Liste des horaires de l'etablissement
<BOUCLE_art(ARTICLES){id_rubrique}>
<h2>#TITRE</h2>
<h3>#SURTITRE</h3><h3>#SOUS_TITRE</h3>
<p>#CHAPO</p><p>#TEXTE</p>
</BOUCLE_art>
</BOUCLE_rub>
Vous voyez il présente de façon complète tous les articles
2. sous_rubrique-travaux.html
<BOUCLE_rub(RUBRIQUES){id_rubrique}>
<BOUCLE_art(ARTICLES){id_rubrique}>
Liste des horaires de l'etablissement
<h2>#TITRE</h2>
<h3>#SURTITRE</h3><h3>#SOUS_TITRE</h3>
<p>#CHAPO</p>
<a href='#URL_ARTICLE'>Lire la suite</a>
</BOUCLE_art>
</BOUCLE_rub>
Celui-là ne présente pas l’article au complet mais juste un lien lire la suite avec le chapeau.
3. sous_rubrique-defaut.html
il s’agit du squelette appelé par défaut si aucun mot clé n’est précisé.
<BOUCLE_rub(RUBRIQUES){id_rubrique}>
<BOUCLE_art(ARTICLES){id_rubrique}>
<a href='#URL_ARTICLE'>#TITRE</a>
</BOUCLE_art>
</BOUCLE_rub>
celui-là est très simple.
Ça se complique un peu, la solution arrive
Voici maintenant le code plus complexe de « sous_rubrique.php3 » que j’expliquerai plus en détail après... Néanmoins faites en une première lecture pour comprendre ultérieurement.
<?php
//on analyse la valeur de la variable $squelette_rubrique
if($squelette_rubrique){
$squelette_rubrique="-".$squelette_rubrique;
}else{
$squelette_rubrique="-defaut";
}
//on construit $fond en fonction de $squelette_rubrique
$fond = "sous_rubrique".$squelette_rubrique;
$delais = 24 * 3600;
include ("inc-public.php3");
?>
Maintenant voici le code tant attendu (roulement de tambour !!!!) du squelette rubrique.html
On suppose au préalable :
- Que vous avez créé un groupe de mot clé que vous appellerez « squelette de rubrique » qui aura pour id 11 par exemple (à adapter à votre site bien entendu).
- Que dans ce nouveau groupe de mot clé vous avez créé les mots clés
« horaire » et « travaux ».
<BOUCLE_squelette_rubrique(MOTS){id_rubrique}{id_groupe=11}{0,1}>
<?php $squelette_rubrique='[(#TITRE|texte_script)]'; ?>
</BOUCLE_squelette_rubrique>
<INCLURE(sous_rubrique.php3){id_rubrique}>
Et voilà le tour est joué !
Recollons les morceaux :
Etape 1
BOUCLE_squelette_rubrique dans rubrique.html va récupérer le mot clé du groupe 11 c’est-à-dire du groupe « squelette de rubrique » et va l’affecter à la variable $squelette_rubrique (n’oubliez de remplacer le chiffre 11 par le numéro de votre goupe de mot clé).
Etape 2
Cette variable $squelette_rubrique est récupérée par le script « sous_rubrique.php3 » qui va alors construire la valeur de $fond en fonction de ce mot clé (relisez son code) :
- Si $squelette_rubrique vaut « horaire » alors $fond vaut sous_rubrique-horaire
- Si $squelette_rubrique vaut « travaux » alors $fond vaut sous_rubrique-travaux
- Si $squelette_rubrique vaut rien alors $fond vaut sous_rubrique-defaut
Etape 3
inc_public.php3 génère la page grâce la valeur qu’aura prise $fond
Et voilà, en espérant avoir été clair. N’hésitez pas à me faire part de vos remarques pour améliorer la lisibilité de cet article. Bien sûr le principe est généralisable à un grand nombre de mots clés et de squelettes :-) Vous n’êtes limités que par votre imagination !
Discussions par date d’activité
15 discussions
Volà, la réponse est peut-être stupide etje m’en excuse d’avance mais y a un truc que je comprends pas ....
J’avais le même problème : besoin de différents squelettes en fonction des rubriques de mon site et ce depuis la page articles.php3... Alors j’ai monté une solution simpliste - que l’on peut améliorer grâce concaténation de chaine - :
et vraiment, je ne vois pas ce que permet de plus les solutions présentées ci-dessus...
Qqn peut m’éclairer ?
Merci d’avance
Emmanuelle Roux
Ton problème à toi est d’avoir différentes présentations en fontcion du secteur.
Ici, il s’agit d’avoir différentes présentations en fonctions des mots-clès de l’article. Ce sont deux approches différentes du problème du changement de squelette, tout simplement.
Bonjour,
c’est vrai que la méthode de E.Roux semble plus simple.
en revanche, j’ai donc placé ce script PHP simmplifié dans ma page article.php3 :
et placé un lien de ce type : a href=« #URL_ARTICLE »>[(#TITRE)] </a sur la page sommaire.html.
SPIP renvoi une erreur « Aucun squelette n’est disponible... ».
Pourtant les pages revue.html, revue.php3, editorial.html et editorial.php3 existent, cette derniere pointe vers editorial par exemple :
Il y a t’il quelques chose qui m’échappe ?
Merci pour toutes ces contrib-
J.Mathias
Répondre à ce message
Pour les étourdis qui comme moi pensaient que l’on ne pouvais pas affecter un mot clé à une rubrique, il faut modifier le groupe de mot clé, et cocher la case rubrique !!!!!
Répondre à ce message
Salut, votre technique semble très pertinante, du moins plus facile à mettre en oeuvre que celle développée sous EVA.
Cependant, doit-on obligatoirement identifier le groupe de mots clés ( id_groupe) dans le squelette rubrique ?
On perd la souplesse de l’utilisation des mots clés, en imposant de mettre en dur dans le code l’id du groupe. Sauf bien šur, si les mots clés servent aussi à d’autres choses. Telle était votre volonté ? ou je me trompe ?
Eh bien oui vous avez bien saisi le probleme, si on utilisait les mots clés uniquement pour les squelettes de rubriques on ne serait pas obligé de choisir un id de groupe. Seulement (c’est le cas sur mon site) mes groupes de mots clé reflete mes qroupes de squelette... Cad que pour les rubriques je propose 11 squelettes différents et j’ai donc 11 mots clés, pour mes articles j’ai 8 squelettes donc 8 mots clés pour les breves j’ai 6 squelettes différents......
Par dessus le marché j’utilise aussi des mots clés pour mettre certains articles en accés restreint (c’est l’objet d’une autre publication encore en test).
Et mes administrateurs utilise aussi les mots clés pour leur role de depart c’est à dire créer certaines transversalités dans spip. Le besoin de compartimenter tous ces mots clés devient évident.
Pour ce qui est d’Eva je suis surpris d’apprendre que la mise en oeuvre est plus complexe c’est souvent du code de bonne qualité, elle ne doit pas etre autant explicité par contre.....
La méthode utilisée par EVA a le mérite de ne pas utiliser de PHP, seulement les balises INCLURE. Mais bon, il faut plus de lignes pour le même résultat.
Pour EVA j’ai trouvé ça super simple et il n’y a pas de php, c’est que du spip et une bonne astuce.
Pour ceux qui souhaitent comparer et me dire la différence
- On duplique le squelette article.html
- Dans celui-ci on colle des boucles qui repèrent le mot-clef ou le groupe de mots clefs de l’article choisi.
- On renomme le double en article-normal.html
- On ajoute autant de squelettes que l’on a de mots-clefs (avec leur jumeaux php3) comme album.html/album.php3
Question
L’avantage et la différence du processus expliqué dans cette page signifie-t-il que seul subsiste article.php3 avec ses différents squelettes,et qu’ainsi $fond s’occupe de tout ? Y’a surement moyen pour qu’un petit malin arrive à lier tout ça !
schuss
salut, le but de l’article n’est pas de dire que c’est mieux que la méthode eva, dans notre méthode si vous ajoutez un mot clé vous changez le .php3 car $fond s’occupe de tout, avec eva il faut rajouter une boucle dans le squelette... c’est juste une vision différente de la même chose (choix du squelette par mot clé)
Juste une petite remarque :
Il me semble qu’avec EVA il faille mettre une boucle par type de squelette alors que pour cette méthode, une seule boucle suffit. Il doit donc y avoir une incidence en terme de charge du serveur. Par ailleurs, pour ce que est de la personnalisation des variables, rien n’empêche de créer des fichier variables-xxx.php avec l’affectation des nouvelle variables.
Daniel
Répondre à ce message
Salut, d’abord un grand merci pour votre article, qui propose en effet une solution plus simple que celle proposée par l’auteur du squelette EVA pour le choix de squelettes.
Par contre, il me semble que l’on perde la possibilité d’affecter des paramettres de personalisation sur le texte specifique à chaque squelette (comme une puce par exemple).
Avez, vous déjà songé à ce problème ?
Peut-être un projet de nouvel article ? ;-)
Excusez moi mais je ne comprends pas votre remarque pouvez-vous la détaillez....
Donc, avec la technique proposé par l’auteur des squellettes EVA, un mot clé permetait de séléctionner le squelette à inclure et chaque squellette avait son propre fichier de variables associées toto.php3.
Avec votre technique tout les squelettes sont associés avec un seul et unique fichier de variables. Aussi ne suffit-il pas de modifier la variable $fond, mais aussi chacune des variables personalisées.
Ce qui est un peu plus compliqué puisqu’il faudrait associer un nom de squelette avec un jeu de variables personalisées corespondantes.
Salut, merci pour votre commentaire, vous avez effectivement raison de signaler cette limitation.
Comme vous le signalez il existe une autre technique de sélection de squelettes par mot clés, celle d’EVA. Chacune ses avantages et ses défauts. Il serait sympa que quelqu’un explique sur spip-contrib simplement comment elle fonctionne, chacun fera ainsi son choix en fonction de ses besoins.
Oui vous avez raison, mais pour ma part je n’ai pas l’habitude d’inserer des variables de configurations dans les php3 donc cette aspect ne m’est jamais apparu comme une perte.
oui, on perd aussi la possibilité de donner une valeur différente à $delais. La valeur étant définie une bonne fois pour toute, pour tous les squelettes.
Répondre à ce message
Tu donnes le code suivant :
<?php $squelette_rubrique='#TITRE'; ?>
C’est un trou de sécurité potentiel. Quand on passe des éléments de texte à php, il faut utiliser le filtre
texte_script
:<?php $squelette_rubrique='[(#TITRE|texte_script)]'; ?>
merci fil, je corrige l’article
Répondre à ce message
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 : |