Classement par titre + sous-rubriques

J'ai un petit problème d'ordre de tri dans un de mes squelettes.
J'aimerai afficher un mini-plan de la structure de la base SPIP, le tout
classé par nom (mes articles et rubriques commencent par un numéro).

Mon problème est que certaines rubriques contiennent en plus des articles,
des sous-rubriques, et que celles-ci se positionnent après le dernier
article de la rubrique parente quel que soit leur nom.

Voici mon code :

<B_RubriquesEnfants1>

<FONT FACE="arial,helvetica,sans-serif" SIZE=3>

<BOUCLE_RubriquesEnfants1(RUBRIQUES){id_parent=1}{par titre}{1/2}>
<BR><FONT FACE="arial,helvetica,sans-serif" SIZE=1>
<B>[<A HREF="#URL_RUBRIQUE"><FONT
COLOR="#000000">(#TITRE|majuscules)</FONT></A>]</B>

<BOUCLE_ArticlesEnfants1(ARTICLES){id_rubrique}{par titre}>
<BR><IMG SRC="puce.gif" BORDER=0> <A HREF="#URL_ARTICLE">#TITRE</A>
</BOUCLE_ArticlesEnfants1>

<BOUCLE_RubriquesPetitsEnfants(RUBRIQUES){id_parent}{par titre}>
<BR><FONT FACE="arial,helvetica,sans-serif" SIZE=1>
<B>[<A HREF="#URL_RUBRIQUE"><FONT
COLOR="#000000">(#TITRE|majuscules)</FONT></A>]</B>
</BOUCLE_RubriquesPetitsEnfants>

</FONT>
<BR>
</BOUCLE_RubriquesEnfants1>

</FONT>
<BR>

</B_RubriquesEnfants1>

Comment je dois me débrouiller pour que les sous rubriques se classent au
milieu des articles, et ce en fonction de leur nom ?

Ca doit ressembler à ceci :

1. Rubrique A
    1.1 Article x

    1.2 Rubrique A1
        1.2.1 Article y
        1.2.2 Article z

    1.3 Article w

2. Rubrique B
    etc...

Merci pour vos conseils.

Steph
        

At 14:55 +0100 21/12/01, stephan wrote:

Comment je dois me débrouiller pour que les sous rubriques se classent au
milieu des articles, et ce en fonction de leur nom ?

Ca doit ressembler à ceci :

1. Rubrique A
    1.1 Article x

    1.2 Rubrique A1
        1.2.1 Article y
        1.2.2 Article z

    1.3 Article w

2. Rubrique B
    etc...

Salut Stephan,

Plusieurs éléments:

(1) Comme tu t'en doutes (puisque tu as manipulé toi-même les squelettes, tu en as certainement déjà compris le principe), ça n'est pas possible directement avec les squelettes: les articles sont appelés par une boucle de type (ARTICLES), et les rubriques par une boucle (RUBRIQUES); donc, puisque ce sont deux affichages successifs, tu ne peux pas les mélanger directement.

(2) Il y aurait moyen de s'en sortir avec du PHP. Les boucles n'afficheraient rien directement, mais placeraient leurs résultats dans une "array" commune aux rubriques et aux articles; ensuite il suffirait de classer cette array (fonction asort()) et d'afficher successivement les résultats. C'est pas évident, mais ça se fait. Si tu veux en plus afficher tout le site, donc en plus traiter les sous-sous-rubriques et les sous-sous-sous-rubriques (etc.), le code PHP devient nettement plus compliqué.

(3) En réalité, je crois que le problème est avant tout structurel: cette façon de structure ton site n'est pas du tout adaptée à un site dynamique enrichi régulièrement. C'est typiquement le plan d'un document, pas celui d'un site Web. Avec une telle structure, toutes les mises à jour du site deviennent pénible.

Par exemple, tu as un article "1.1" suivi d'une rubrique "1.2". Que se passe-t-il si tu veux ajouter de l'information au niveau de "1.1"? Tu dois:
- créer une nouvelle rubrique 1.1;
- transférer l'article 1.1 dans cette nouvelle rubrique, et le renommer "1.1.1";
- enfin seulement créer ton nouvel article dans cette rubrique, nommé "1.1.2".

À l'inverse, imaginons que ton article "1.2.2" ne convienne plus (ou que tu le déplaces dans une autre rubrique). De fait, ta rubrique 1.2 n'a plus de raison d'être, puisqu'elle ne contient qu'un unique article. Ici tu dois:
- déplacer l'article 1.2.1 au niveau de la rubrique 1;
- renommer cet article 1.2.1 en 1.2;
- supprimer la rubrique 1.2.

Bref, ce fonctionnement me semble adapté à un site totalement figé. Mais pour un site destiné à évoluer, c'est la galère assurée.

Amicalement,
ARNO*

--
Le Scarabée : http://www.scarabee.com
uZine 2 : http://www.uzine.net

DH/DSS, 0x11930F0B, DEEB 602D B344 644B AF88 BF73 85F4 2297 1193 0F0B

le 22/12/01 5:13, ARNO* à arno@scarabee.com a écrit :

At 14:55 +0100 21/12/01, stephan wrote:

Comment je dois me débrouiller pour que les sous rubriques se classent au
milieu des articles, et ce en fonction de leur nom ?

Ca doit ressembler à ceci :

1. Rubrique A
    1.1 Article x

(1) Comme tu t'en doutes (puisque tu as manipulé toi-même les
squelettes, tu en as certainement déjà compris le principe), ça n'est
pas possible directement avec les squelettes: les articles sont
appelés par une boucle de type (ARTICLES), et les rubriques par une
boucle (RUBRIQUES); donc, puisque ce sont deux affichages successifs,
tu ne peux pas les mélanger directement.

attends, ce n'est pas ce que fait directement le squelette "plan.html" ?

le code ci-dessous est exactement recopié par copier coller d'un fichier
planbrut.html à partir du plan.html standard obtenu en enlevant le code des
autres éléments tels que puces, brèves, syndication, lignes de séparation
purement visuelles etc.

testé en local, cela fonctionne avec rubrique de premier niveau,
sous-rubrique de second niveau et article dans les rubriques ou les
sous-rubriques

l'astuce paraît être dans la séparation de l'affichage du premier niveau des
rubriques (qui se fait dans le corps du texte html sans mise en page par une
table) des niveaux suivants en faisant l'appel aux niveaux plus bas dans une
table. Si on enlève les deux tables l'affichage des articles se fait par id
d'article sans tenir compte des rubriques.

<BOUCLE_secteurs(RUBRIQUES){id_parent=0}{par id_rubrique}>

<!-- table de séparation entête/rubriques, si on l'enlève la première
rubrique s'affiche au dessus de l'en-tête -->
<TABLE WIDTH=100% CELLPADDING=0 CELLSPACING=0 BORDER=0>

    <A HREF="#URL_RUBRIQUE"><FONT FACE="arial,helvetica,sans-serif" SIZE=5
COLOR="#000000">#TITRE</FONT></A>

<!-- table contenant sous-rubriques et articles, si on l'enlève le texte
s'affiche à coté de l'en-tête. Si on enlève les deux tables les articles et
les rubriques et sous rubriques s'affichent toujours de façon structurée
mais chaque niveau suit son propre ordre par numéro d'ID-->

<TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 WIDTH=632>
    <TR><FONT FACE="arial,helvetica,sans-serif" SIZE=2><BR><BR>

        <BOUCLE_les_articles(ARTICLES){id_rubrique}>
            <BR><A HREF="#URL_ARTICLE">#TITRE</A>
        </BOUCLE_les_articles>

    <BOUCLE_sous_rub(RUBRIQUES){id_parent}{par titre}>
        <P><A HREF="#URL_RUBRIQUE"><FONT FACE="arial,helvetica,sans-serif"
COLOR="#000000">[(#TITRE|majuscules)]</FONT></A>

    <FONT SIZE=1>

        <BOUCLE_meme_rubrique(ARTICLES){id_rubrique}>
             <BR><<A HREF="#URL_ARTICLE">#TITRE</A>
        </BOUCLE_meme_rubrique>

    <UL>
        <BOUCLE_enfants(BOUCLE_sous_rub)></BOUCLE_enfants>
    </UL>

    </FONT>
    </BOUCLE_sous_rub>

    </FONT>
    <BR><BR>
</TD>
</BOUCLE_secteurs>

--
Henri Balmain
henri.balmain@free.fr

site perso en construction http://www.FreeNours.org
l'association des Houebmestres Écolos http://www.VertWeb.org

attends, ce n'est pas ce que fait directement le squelette "plan.html" ?

Et non Henri,

Comme le disais Arno, il est impossible avec SPIP de mélanger les boucles ARTICLES et RUBRIQUES. Elles sont exécutées l'une après l'autre, ce qui empêche d'avoir un plan véritablement classé en prenant en compte les rubriques et ses articles, ainsi que ses sous-rubriques et ses articles.

Ton code (comme celui de plan.html) affiche ceci comme résultat :

Rubrique 1
  Article 1.1
  Article 1.3

  Rubrique 1.2
    Article 1.2.1
    Article 1.2.2

Rubrique 2
...

Alors que je cherche à afficher

Rubrique 1
  Article 1.1

  Rubrique 1.2
    Article 1.2.1
    Article 1.2.2

  Article 1.3

Rubrique 2
...

Steph