Pour SPIP 1.6 ou 1.7
Je me suis donc mis à développer un site avec des rubriques qui pour l’instant n’ont qu’un seul article (voire même pas d’article, mais seulement des liens).
J’ai donc utilisé le code suivant pour faire mes liens.
<BOUCLE_Rubriques(RUBRIQUES){id_parent=0} {par num titre}><h2 title="[(#DESCRIPTIF)]">[(#TITRE|supprimer_numero)]</h2>
<BOUCLE_SsRubriques(RUBRIQUES){id_parent} {par num titre}><li>
<?php $ledescriptif = '[(#DESCRIPTIF|texte_script)]';
$letitre='[(#TITRE|texte_script|supprimer_numero)]';
?>
<BOUCLE_articles_plusdun(ARTICLES) {id_rubrique} {1,1}>
<a href="[(#URL_RUBRIQUE)]" title="<? echo $ledescriptif; ?>"><? echo $letitre; ?></a>
</BOUCLE_articles_plusdun>
<BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {0,1}>
<a href="[(#URL_ARTICLE)]" title="<? echo $ledescriptif; ?>"><? echo $letitre; ?></a>
</BOUCLE_articles_unseul>
<a href="[(#URL_RUBRIQUE)]" title="<? echo $ledescriptif; ?>"><? echo $letitre; ?></a>
<//B_articles_unseul>
<//B_articles_plusdun>
</li></BOUCLE_SsRubriques>
</ul>
</BOUCLE_Rubriques>
Quelques remarques pour comprendre ces boucles :
- les rubriques principales n’ont pas d’articles, seules les sous-rubriques en ont (et il n’y a que 2 niveaux de rubriques)
- Il y a 3 cas à gérer :
- Il y a au moins 2 articles : renvois sur la rubrique
- Il n’y a qu’un article : renvois sur l’article
- Il n’y a pas d’article (ça peut se produire : quand il n’y a que des liens ou que des brèves) : renvois sur la rubrique
- Dans tous les cas, on a stocké avant de faire les sous-boucles le titre et descriptif de la rubrique concernée pour pouvoir les mettres dans le lien.
Mise à jour pour la 1.8
La version 1.8 de SPIP introduit la notion de Balises non ambiguës. Ceci permet de réécrire cette contrib sans utiliser de php (qui ne servait après tout qu’à récupérer le #TITRE et le #DESCRIPTIF de la rubrique alors qu’on était déjà dans un boucle ARTICLES).
<BOUCLE_Rubriques(RUBRIQUES){id_parent=0} {par num titre}><h2 title="[(#DESCRIPTIF|supprimer_tags|attribut_html)]">[(#TITRE|supprimer_numero)]</h2>
<BOUCLE_SsRubriques(RUBRIQUES){id_parent} {par num titre}><li>
<BOUCLE_articles_plusdun(ARTICLES) {id_rubrique} {1,1}>
<a href="[(#URL_RUBRIQUE)]"[ title=(#_SsRubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_SsRubriques:TITRE|supprimer_numero)]</a>
</BOUCLE_articles_plusdun>
<BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {0,1}>
<a href="[(#URL_ARTICLE)]"[ title=(#_SsRubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_SsRubriques:TITRE|supprimer_numero)]</a>
</BOUCLE_articles_unseul>
<a href="[(#URL_RUBRIQUE)]"[ title=(#_SsRubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_SsRubriques:TITRE|supprimer_numero)]</a>
<//B_articles_unseul>
<//B_articles_plusdun>
</li></BOUCLE_SsRubriques>
</ul>
</BOUCLE_Rubriques>
Version universelle : illimitée et récursive
Et voici, toujours pour la version 1.8.x de SPIP ce qu’il faut écrire pour avoir une liste à puce plus ou moins indentée reprenant la structure hiérarchique des rubriques du site, quelle que soit la profondeur de cette hiérarchie.
<B_Secteurs>
<ul>
<BOUCLE_Secteurs(RUBRIQUES){racine}{par num titre}{doublons}>
<li><BOUCLE_articles_plusdunSecteurs(ARTICLES) {id_rubrique} {1,1}><a href="[./(#URL_RUBRIQUE)]" title="[(#_Secteurs:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Secteurs:TITRE|supprimer_numero)]</a></BOUCLE_articles_plusdunSecteurs><BOUCLE_articles_unseulSecteurs(ARTICLES) {id_rubrique} {0,1}><a href="[./(#URL_ARTICLE)]" title="[(#_Secteurs:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Secteurs:TITRE|supprimer_numero)]</a></BOUCLE_articles_unseulSecteurs><a href="[./(#URL_RUBRIQUE)]" title="[(#_Secteurs:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Secteurs:TITRE|supprimer_numero)]</a><//B_articles_unseulSecteurs> <//B_articles_plusdunSecteurs>
<B_Rubriques>
<ul>
<BOUCLE_Rubriques(RUBRIQUES){id_parent}{par num titre}{doublons}>
<li><BOUCLE_articles_plusdun(ARTICLES) {id_rubrique} {1,1}><a href="[./(#URL_RUBRIQUE)]" title="[(#_Rubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Rubriques:TITRE|supprimer_numero)]</a></BOUCLE_articles_plusdun><BOUCLE_articles_unseul(ARTICLES) {id_rubrique} {0,1}><a href="[./(#URL_ARTICLE)]" title="[(#_Rubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Rubriques:TITRE|supprimer_numero)]</a></BOUCLE_articles_unseul><a href="[./(#URL_RUBRIQUE)]" title="[(#_Rubriques:DESCRIPTIF|supprimer_tags|attribut_html)]">[(#_Rubriques:TITRE|supprimer_numero)]</a><//B_articles_unseul> <//B_articles_plusdun><BOUCLE_SsRubriques(BOUCLE_Rubriques)></BOUCLE_SsRubriques></li>
</BOUCLE_Rubriques>
</ul>
</B_Rubriques>
</li>
</BOUCLE_Secteurs>
</ul>
</B_Secteurs>
Notez l’usage d’un appel de boucle récursif :
<BOUCLE_SsRubriques(BOUCLE_Rubriques)></BOUCLE_SsRubriques>
Cet appel permet de descendre dans la hiérarchie tant qu’il faut pour parcourir l’ensemble des sous-niveaux.
Discussions par date d’activité
22 discussions
Bonjour
Je vous propose une variante qui consiste à rediriger en php la rubrique vers l’article unique qu’elle contient.
C’est le plus court et le simple qu’on puisse faire je crois.
Il suffit de rajouter ceci dans votre squelette rubrique.html (au dessus de la balise html) :
C’est une variante de la boucle proposée par Creacyte qui consiste à rediriger avec la balise meta refresh qui me posait probleme car elle redirige vers la page demandée après avoir afficher la page rubrique. La méthode de redirection php me parait bcp plus transparente et rapide pour l’internaute.
Mais n’étant pas développeur, je ne connais pas les conséquences que cela peut avoir.
Donc si certains y voient des contre-indications, merci de me le faire savoir.
Ça marche ! :-)
Salut,
J’ai étendu cette solution avec :
qui possède l’avantage de prendre en compte les sous-rubriques.
Grand merci pour cette solution.
Au départ je ne l’avais pas vue, j’ai donc cherché avec des doubles boucles (le souci étant de ne pas afficher directement l’article unique quand il y a des articles dans des sous-rubriques), pour définir le nombre de sous rubriques puis de n’exécuter la redirection vers l’affichage de l’article que si c’était justifié, sans jamais trouver la solution, et là, avec branche, bingo :-)
Répondre à ce message
à placer dans la partie < head > < /head > du fichier rubrique.html
Répondre à ce message
Ce lien répond également très bien à la question :
http://forum.spip.org/fr_228197.html
Répondre à ce message
Voici une version simplifiée fonctionnant sous Spip 2.1et aussi avec les squelettes Zpip . Le fichier du squelette des rubriques (rubrique.html) doit être renommé en « rubrique-standard.html ». Le code ci-dessous doit remplacer le contenu de rubrique.html.
Pour zpip, les fichiers concernés sont dans le dossier contenu (le code ci-dessous est adapté à ce cas, sinon rectifier les lignes 9, 18 et 22 selon la topologique de votre site)
merci pour cette solution ; je n’ai pas réussi avec le menu directement (spip2.0.11) et comme j’avais déjà remplacé le contenu de rubrique.html par :
pour avoir un squelette diffèrent par mot clef, c’était un peu compliqué...
En surchargeant rubrique-normal par votre code en créant une « rubrique normal2 » ça a marché......
si ça peut servir a d’autres....
Pour le menu j’ai bloqué au moment de la rubrique avec un seul article ; le titre affiché était celui de l’article ; pas de la rubrique....
Répondre à ce message
Bonjour,
Est ce que cela fonctionne pour les versions 2.0 de Spip ???
Merci,
Estelle.
Répondre à ce message
Je n’arrive pas à exposer via #EXPOSE.
Quelqu’un a t-il reussit à le faire ?
Répondre à ce message
Pas de problème, sauf pour utiliser #EXPOSE. Pour le moment, je ne trouve pas de solution.
Je rencontre le même problème. Je n’arrive plus à EXPOSER la rubrique sélectionnée ?
Quelqu’un a-t-il trouvé la solution ?
Répondre à ce message
Bonjour,
Je suis débutant sur Spip. J’aimerais bien essayer de modifier les boucles nécessaires si je savais où elles sont ! Savez-vous où / dans quel fichier(voir ci-dessous)se trouvent les boucles à modifier ?
Pour info : J’utilise le squelette Erasme (téléchargé sur spip-contrib) Il y a des dizaines de fichiers dont :
- article.html
- menu.html
- menu2.html
- plan.html
- rubrique.plan.html
- rubrique.html
Merci
Ben, les boucles se trouvent... Où tu veux ! Bon, on pourrait dire que ces boucles s’adaptent particulièrement bien au fichier « rubrique.html » : au lieu d’afficher un titre / descriptif de rubrique suivi d’une liste de... 1 article, on affiche directement l’article.
Mais ces boucles peuvent d’appliquer ailleurs, ce sont des boucles (RUBRIQUES), il y en a un peu partout dans les squelettes...
(#TITRE|supprimer_numero)
] [(#SOUSTITRE|majuscules)
] [(#TEXTE)] [<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-3025906-5";
urchinTracker();
</script>
Apparemment je ne peux pas poster correctement le code. Je m’excuse donc pour le post inutile.
Je suis donc perdu :-(
Merci
Répondre à ce message
Le squelettre de spip-contrib utilise une noisette qui doit être un produit de cet article non ?
J’ai eu l’occasion de recommander son emploi sur spip-user, aussi je propose d’ajouter à cette contrib un 4e sous- titre intitulé « Utilisation des boucles dans une noisette »
Avec un texte du genre : On peut également utiliser ces boucles en inclure dans un menu, dans un fil d’ariane ou dans l’affichage de sous-rubriques dans un squelette.
Pour cela, il suffit de créer une noisette (un fichier à inclure dans un squelette) (=>mettre le fichier inc-triurlrubrique.html de spip-contrib).
On remplace la balise URL_RUBRIQUE par l’inclusion de la noisette :
à la place de
<a href="#URL_RUBRIQUE" > #TITRE</a>
on metAvantage : il n’y a aucune autre modification à apporter aux squelettes pour obtenir l’affichage de l’article d’une rubrique à article unique.
Merci, c’est génial.
Très bonne idée de rajouter un sous-titre « Utilisation dans une noisette »
Hello les spipeur(euse)s,
J’ai essayé la noisette de Stanislas est c’est une pure merveille de facilité. Pour un petit site qui n’a pas trop d’articles dans ses rubriques, je dirais même que c’est indispensable question navigation.
Un grand merci pour cette contrib, de la part d’un spipeur même pas capable de développer, juste d’utiliser.
Bonjour,
Pourriez-vous me donner plus d’explications s’il vous plaît.
j’ai telechargé « inc-triurlrubrique.html » je l’ai mis dans mon dossier squelettes,
ensuite vous dites
remplacer la balise URL_RUBRIQUE par l’inclusion de la noisette : à la place de URL_RUBRIQUE
c’est à modifier dans le fichier rubrique.html dans mon dossier squelettes ? c’est bien ça ?
merci d’avance
Hello pmd,
Non, pas tout à fait. Tu dois remplacer ce fameux
<a href="#URL_RUBRIQUE" > #TITRE</a>
par
<a href="<INCLURE{fond=inc-triurlrubrique}{id_rubrique}>" > #TITRE</a>
quelque part où tu cherches les rubiques par une boucle pour les afficher dans un menu par exemple.
Je pense que c’est dans le squelette qui affiche le menu que tu devrais modifier le code.
Bonjour,
Je suis débutante en spip et j’utilise spip 1.9.2.
Je cherche en vain comment afficher directement 1 article si la rubrique ou sous-rubrique n’en a qu’un. j’ai essayé comme indiqué de remplacer dans le fichier inc-menu #TITRE par
<a
href="" > #TITRE
J’ai tenté également : .
Mais dans les 2 cas, ca bug et ca donne n’importe quoi sur le site.
Est-ce que les fichiers inc-triurlrubrique.html et redirection_1_seul_article.html sont bien adaptées à cette version de SPIP ??
Si qqun a des idées, je serai très reconnaissante, car je rame complètement !
Merci beaucoup.
Hello Marie,
Premièrement, laisse tomber le "redirection_1_seul_article.html.
Maintenant, tu copies le fichier inc-triurlrubrique.html dans le répertoire de ton squelette (où ya tous les fichiers propre à ton site).
Ensuite, tu repères, toujours dans le répertoire squelette de ton site, le fichier qui affiche les rubriques. En général, c’est le fichier qui crée le menu. Tu fais une copie de sauvegarde de ce fichier et tu commences :
Dans ce fichier, tu cherches la boucle qui affiche les rubriques. Chez moi, par ex. c’est :
Si tu ne trouves pas, fait une recherche sur « BOUCLE_secteurs(RUBRIQUES) » dans le répertoire de ton squelette (avec Dreamweaver, c’est un jeu d’enfant ;-)
Ensuite, tu inclus fond=inc-triurlrubrique comme ci-dessus dans la balise « a href »
N’oublie pas d’enregistrer puis d’envoyer ton fichier modifié et le fichier inc-triurlrubrique.html chez ton hébergeur chéri et voilà, le tour est joué.
Mêêêême moi j’y suis arrivé alors persévère encore juste un peu et tu verras le firmament ;-)) Grand Wazoo
Répondre à ce message
Bonjour ! J'ai créé une petite variante à cette contrib : elle redirige sur les articles et les rubriques également. Il faut créer un fichier nommé redirection_1_seul_article.html dans le répertoire squelettes de votre site Contenu du fichier redirection_1_seul_article.html <B_nb_article><BOUCLE_nb_article(ARTICLES)\{id_rubrique}><?php $urlArticle="#URL_ARTICLE"; $totalArticles = '#TOTAL_BOUCLE' ?></BOUCLE_nb_article></B_nb_article> <B_nb_rubriques><BOUCLE_nb_rubriques(RUBRIQUES)\{id_parent}\{tout}><?php $urlRubrique="#URL_RUBRIQUE"; $totalRubriques = '#TOTAL_BOUCLE'; ?></BOUCLE_nb_rubriques></B_nb_rubriques> <B_texte_rubriqueEnCours><BOUCLE_texte_rubriqueEnCours(RUBRIQUES)\{id_rubrique}><?php $texteRubEnCours = '#TEXTE'; ?></BOUCLE_texte_rubriqueEnCours></B_rubriqueEnCours> <?php if ($totalRubriques == 0 && $totalArticles == 1 && $texteRubEnCours == '') \{ header("location:$urlArticle"); } ?> <?php if ($totalRubriques == 1 && $totalArticles == 0 && $texteRubEnCours == '') \{ header("location:$urlRubrique"); } ?> L'appel se fait {via} : Principe : - on teste s'il existe d'autres sous rubriques dans la rubrique courante - on teste s'il existe d'autres articles dans la rubrique courante - on teste si la rubrique courante possède une description S'il n'y a aucune sous-rubrique, 1 seul article et que le texte de la rubrique courante est vite, alors on redirige sur l'article unique de la rubrique courante. S'il n'y a aucun article, 1 seule sous-rubrique et que le texte de la rubrique courante est vide, alors on redirige vers la sous-rubrique unique de la rubrique courante. Appel : Quel est l'intérêt ? Si vous avez, pour des raisons de catégorisation, des rubriques ne contenant qu'une seule sous-rubrique ou qu'un seul article, l'utilisateur n'aura pas à "gaspiller" des clicks pour atteindre le 763ème niveau de l'arborescence. Et voilà, merci de votre attention ! Mika
Et la même sans PHP ?
une n-ième variante ....
mais sans PHP grâce à #GET / #SET
le fichier rubrique.html sert de bifurcateur :
- si on a 1 article : on appelle la page article
- sinon on charge le squelette qui décrit la rubrique normale (à créer) rubrique_normale
Amélioration possible :
Tenir compter des sous-rubriques, on inclut le squelette article si la rubrique contient 0 article ET 0 sous-rubrique
Salut Erat :), Comme d’hab tu es le best, que dire, merci King...
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 : |