SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

289 Plugins, 197 contribs sur SPIP-Zone, 76 visiteurs en ce moment

Accueil > Navigation > Tris hétérogénes > Mélanger et trier des éléments hétérogénes

Mélanger et trier des éléments hétérogénes

20 octobre 2005 – par mortimer – 13 commentaires

Toutes les versions de cet article : [français] [italiano]

11 votes

Voici une boucle pour faire un affichage trié et mélangé de différents types d’éléments SPIP.

Principe Général

Nous allons afficher un mélange d’articles et de rubriques.

Le problème pour réussir un affichage trié de rubriques et d’articles, c’est qu’on ne peut pas faire une boucle qui sélectionne en même temps les deux. On peut soit faire une boucle ARTICLES soit une boucle RUBRIQUES.

On est donc obligé de faire l’affichage dans deux boucles différentes, ce qui complique un peu l’affichage des deux types d’éléments dans une même liste selon un certain ordre.

Voici une boucle qui offre une solution pour faire un affichage trié par date :

qui nous donnera un affichage du genre :

Rub: 2005-07-21 16:55:59 Blog
Art: 2005-07-21 16:39:54 And you, where are you?
Art: 2005-07-08 17:12:38 Il reste des politiciens de génie (au moins 1)
Art: 2005-07-04 16:33:58 Déménagement
Rub: 2005-07-01 16:08:12 Computing
Rub: 2005-07-01 16:08:12 Out There
Art: 2005-07-01 16:08:12 Easy Personal Podcasting
Art: 2005-07-01 15:38:30 Ecole Polytechnique de ???

La solution est en fait assez simple à comprendre :

  1. on commence par boucler sur toutes les rubriques (BOUCLE_rubriques)
  2. pour chaque rubrique, on regarde s’il y a des articles qui devraient être affichés avant, grâce au critère {date>#DATE}
  3. on affiche ensuite la rubrique
  4. une fois qu’on a parcouru toutes les rubriques, on affiche le reste des articles. Ceux qui sont plus vieux que toutes les rubriques du site.

Le critère {doublons} permet de ne pas afficher plusieurs fois le même article.

D’autres tris

On peut évidemment utiliser d’autres tris que le tri par date, il faut alors penser à modifier les critères en conséquence.

Par exemple, si on trie avec des numéros dans les titres, il faut remplacer :

  • {par date} {inverse} par {par num titre}
  • {date>#DATE} par {titre<#TITRE}

Subtilité avec les id_rubrique

Il faut bien faire attention, cette boucle affiche tous les articles et les rubriques du site. Si on voulait afficher seulement les articles et sous-rubriques de la rubrique du contexte, il faudrait se méfier du piège avec le critère id_rubrique de la boucle _articles.

En effet, imaginons qu’on soit dans un squelette entouré d’une boucle principale :

<BOUCLE_principale(RUBRIQUES) {id_rubrique}>

si on mettait juste {id_rubrique} dans la boucle _articles, on ne sélectionnerait pas les articles de la rubrique sélectionnée par la boucle _principale, mais les articles de la rubrique sélectionnée par la boucle _rubriques.

Il faudra donc utiliser le critère : {id_rubrique = #_principale:ID_RUBRIQUE} qui spécifie que l’on doit bien prendre les articles de la rubrique principale.

On aurait donc :

D’autres mélanges

Remarquez que cette méthode peut facilement s’appliquer à d’autres types d’éléments de SPIP. On peut tout aussi bien mélanger brèves et articles par exemple :

On peut même aller plus loin et mélanger 3 types d’éléments :

On mélange ici des articles, des brèves et des rubriques. On a donc ajouté des boucles brèves, qui sont considérées après toutes les autres.

On a donc :

  1. la boucle _breves dans la boucle _articles qui trouve toutes les brèves plus jeunes que l’article actuel,
  2. la boucle _breves2 dans la boucle _rubriques qui trouve toutes les brèves plus jeunes que la rubrique mais plus vieilles que tous les articles plus jeunes,
  3. la boucle _breves_fin1 dans la boucle _article_fin qui trouve toutes les brèves plus jeune que les articles plus vieux que toute rubrique,
  4. la boucle _breves_fin2 qui trouve les brèves plus vielles que tous les articles et que toutes les rubriques.

C’est pas beau tout ca ?

Dernière modification de cette page le 6 décembre 2006

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 26 août 2008 à 19:34, par mokland En réponse à : Mélanger et trier des éléments hétérogénes

    super contrib ! merci beaucoup !
    ça m’a permis de faire en 5 minutes ce qui m’aurait valu des heures de réflexion et des maux de crane ;p

    Répondre à ce message

  • Le 4 avril 2008 à 07:46, par yoh En réponse à : PAGINATION

    Bonjour et merci pour cette contrib que j’ai longtemps cherché

    J’ai deux boucles imbriquées (qui fonctionne, ça me semble toujours incroyable) de la forme :

    <BOUCLE_site_yoh(SITES) {!par date}{syndication=non}>  

                            <BOUCLE_syndic_articles_yoh(SYNDIC_ARTICLES) {age_relatif<0}  {!par date}{doublons}>
                   
               
             <div class="texte"><a href="#URL_ARTICLE" ><b>[(#TITRE|supprimer_numero)]</b></a></div>    
           
     
                             </BOUCLE_syndic_articles_yoh>  
                         
             <div class="texte"><a href="#URL_SITE" ><b>[(#_site_yoh:NOM_SITE|supprimer_numero)]</b></a></div>    
           
          </BOUCLE_site_yoh>

    Cela liste, par date, les sites référencés non-syndiqués avec les articles_syndiqués de manière indifférencié.

    J’aimerai paginer cette liste mais je bloque depuis 2 jours dessus.

    Je n’arrive pas à faire comprendre à la balise #PAGINATION qu’il lui faut additionner les articles_syndiqués avec les sites non-syndiqués avant de faire son job.

    Si quelqu’un a une idée de piste, je suis preneur :)

    Merci d’avance

    • Le 22 avril 2008 à 08:36, par yoh En réponse à : PAGINATION

      Après pas mal de recherche, pagination impossible.

      J’ai donc afficher les résultats par age<30jrs puis avec l’aide de boutons par mois.

      Cela marche :)

    Répondre à ce message

  • Le 19 décembre 2007 à 20:04, par Patrick En réponse à : Mélanger et trier des éléments hétérogénes

    <BOUCLE_articles(ARTICLES) {id_rubrique} [{par num titre}{inverse}][!{par date}{inverse}] {pagination}>

    Voilà ce que j’utilise pour allier le numéro et la date dans l’ordre (inverse pour les numéros).

    Répondre à ce message

  • Le 7 août 2007 à 14:57, par Jean Baptiste Pressac En réponse à : Cas d’utilisation avec le filtre supprimer_numero

    Je me permet de signaler que si vous voulez utiliser cette boucle pour effectuer des tris avec des numéros dans les titres et que vous utilisez le filtre supprimer_numero pour faire disparaitre le numéro, vous devez faire suivre d’une astérisque la balise #TITRE du filtre {titre<#TITRE*} comme évoqué sur le forum. La boucle devient donc :

    <BOUCLE_rubriques(RUBRIQUES) {par num titre}>
        <BOUCLE_articles(ARTICLES) {par num titre} {doublons} {titre<#TITRE*}>
             Article: #TITRE<br>
        </BOUCLE_articles>
        Rubrique: #TITRE<br>
    </BOUCLE_rubriques>

    <BOUCLE_article_fin(ARTICLES) {par num titre}{doublons}>
        Article: #TITRE<br>
    </BOUCLE_article_fin>

    Répondre à ce message

  • Le 13 avril 2007 à 11:42, par ? En réponse à : Mélanger et trier des éléments hétérogénes

    C’est beau. Bravo et merci infiniment pour cette contribution fort utile.

    Répondre à ce message

  • Le 22 mars 2007 à 10:39, par tetue En réponse à : Mélanger brèves et articles

    Moi je m’en sers systématiquement dans le « backend » pour construire un flux RSS qui diffuse à la fois les brèves et les articles.

    Répondre à ce message

  • Le 14 août 2006 à 15:42, par indie En réponse à : Mélanger et trier des éléments hétérogénes

    Félicitations, ça marche à merveille.

    Répondre à ce message

  • Le 23 novembre 2005 à 15:56, par MTM En réponse à : Mélanger et trier des éléments hétérogénes

    Bonjour,

    excellente l’idée, j’ai voulu la tester mais hélas, elle n’a pas fonctionné pour mon cas.

    en fait je souhaiterais afficher l’arborescence d’une rubrique et trier ses éléments par ordre alphabétique, et ceux-ci de manière récursive.

    ex :

    • rub
      • art 1.
      • rub 2.
        • art 2.1
        • art 2.2
        • rub 2.3
          • ...
      • art 3.

    j’ai donc voulu utiliser cet algo, (car il s’agit bien d’un algo), et l’adapter pour qu’il fonctionne de manière récursive.

    j’ai alors constaté deux problèmes :
    -  le premier se situe au niveau de la condition id_rubrique=#_principal:ID_RUBRIQUE
    -  le second a déjà été mentionné, il s’agit de la condition titre<#TITRE qui ne fonctionne pas visiblement, d’ autant que dans mon cas il faudrai plutôt utiliser num titre<#TITRE, mais cela ne fonctionne pas évidemment

    voici une partie de mon code :

    si quelqu’un voit où je me suis trompé, ou a une solution alternative, je suis intéréssé.

    d’autant plus que je pense que ce morceau de code, s’il fonctionne sera d’une grande utilité pour beaucoup de monde.

    Merci

    Répondre à ce message

  • Le 3 novembre 2005 à 16:47, par nic ;o) En réponse à : Mélanger et trier des éléments hétérogénes

    Vraiment chouette !
    -  Merci ;-)

    Répondre à ce message

  • Le 21 octobre 2005 à 15:03, par balluche En réponse à : Mélanger et trier des éléments hétérogénes

    Cà fait des lustres que je cherche une solution pour ordonner les articles et les sous rubriques d’une rubrique en même temps. Un problème se pose si on souhaite trier par autre chose qu’une date. Si tu peux me trouver une soluce ...

    J’ai déjà commencé avec ton exemple mais çà me paraît pas viable, sachant que le critère {titre<#TITRE} pour la sous-boucle article semble ne pas marcher et que de toutes façons il faudrait prendre en charge le numéro dans le titre (qui sert à ordonner) comme on le fait pour le tri {par num titre}.

    Mon code :

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?
  • [Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • ORR v2

    21 mai 2013 – 105 commentaires

    ORR, le plugin d’Organisation des Réservations et des Ressources passe en version 2, avec quelques nouveautés attendues. Je ne reprendrai pas les explications données dans la version 1. Les nouveautés : 1. Gestion des autorisations Le principe (...)

  • Speedsyndic pour SPIP 2 et SPIP 3

    11 octobre 2010 – 32 commentaires

    Ce plugin est une version compatible spip 2.0.x / 2.1 / 3.1 du plugin Speedsyndic Note : Une bonne partie du texte ci-dessous a été pompé de cet article, expliquant la version précédente du plugin. je n’ai fait qu’adapter le code pour spip 2, ajouter (...)

  • Personnalisation graphique du squelette SoyezCréateurs

    19 août 2009 – 110 commentaires

    Il est possible de personnaliser l’affichage du squelette SoyezCréateurs de manière plus ou moins profonde. Changement dans les couleurs via CFG La page de CFG des couleurs de SoyezCreateurs : ecrire/ ?exec=cfg&cfg=soyezcreateurs_couleurs (...)

  • Visualiser un PDF dans un article

    13 juin – commentaires

    SoyezCréateurs utilise un modèle pour afficher un PDF dans e corps d’un article Un peu d’histoire Avant, les navigateurs n’incluaient pas de lecteur PDF nativement ce qui avait conduit à la création du plugin Lecteur pdf javascript pdf.js. Mais, (...)