SPIP-Contrib

SPIP-Contrib

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

286 Plugins, 197 contribs sur SPIP-Zone, 265 visiteurs en ce moment

Accueil > Navigation > Tris hétérogénes > Mélange d’éléments hétérogènes

Mélange d’éléments hétérogènes

1er mai 2012 – par Shnoulle – 10 commentaires

8 votes

Une méthode pour mélanger autant de type d’éléments voulus et de se servir de toutes les possibilité des boucles, par exemple la pagination.

Avec SPIP Bonux ou Spip 3, nous allons pouvoir utiliser une autre méthode qui va nous permettre de mélanger un nombre illimité d’éléments, d’utiliser les paginations, ou encore d’autres possibilités offertes par le système de boucles habituelles.

La base du système.

Nous allons utiliser des tableaux de tableaux d’éléments. Chaque élément sera constitué de 3 éléments : Son type d’objet [1], son identifiant [2], et le champ de tri qui sera utilisé dans la boucle suivante.

Ensuite nous utilisons une boucle POUR [3].
Pour faciliter la mise en place des tableaux, nous remplissons des variables avec la balise #VALEUR, le filtre |table_valeur et la balise #SET.

Dans l’ordre :

  1. Création du tableau.
  2. Remplissage du tableaux avec les tableau des éléments avec des boucles dédiées.
  3. Boucle sur le tableau ordonné à notre convenance.
  4. Dans cette boucle nous utilisons soit un filtre de test |oui pour inclure chaque squelettes en fonction du type d’objet, soit une boucle CONDITION pour afficher le contenu selon le type d’objet, cette possibilité peut se faire dans un autre fichier ; [4].

Nous présentons 2 possibilités à la suite. La première inclut un fichier commun pour tous les éléments, le 2e se sert du filtre |oui pour l’un des éléments et une boucle CONDITION pour l’autre.

Cela nous permet d’utiliser toutes les fonctionnalités de tri sur la dernière boucle, les filtres étant appliqués sur les premières boucles.

Exemple pour une liste de brèves et d’articles d’une rubrique triés par date

Création et remplissage du tableau : nous utilisons la balise #SET pour créer et remplir un tableau défini par #ARRAY. Il serait possible d’ajouter les éléments avec |push, nous utilisons ici #SET_PUSH de bonux.

  1. [(#REM) On créé le tableau]
  2. #SET{elements,#ARRAY{}}
  3.  
  4. [(#REM) On le remplit avec les articles de la rubrique en cours]
  5. <BOUCLE_articles(ARTICLES){id_rubrique}>
  6. #SET{element, #ARRAY{objet,"article",id_objet,#ID_ARTICLE,date,#DATE}}
  7. #SET_PUSH{elements,#GET{element}}
  8. </BOUCLE_articles>
  9.  
  10. [(#REM) On le remplit avec les brèves de la rubrique en cours]
  11. <BOUCLE_breves(BREVES){id_rubrique}>
  12. #SET{element, #ARRAY{objet,"breve",id_objet,#ID_BREVE,date,#DATE}}
  13. #SET_PUSH{elements,#GET{element}}
  14. </BOUCLE_breves>

Télécharger

Construction de la boucle pour récupérer les éléments du tableau, rien de difficile sur cette boucle.
Nous remplissons 2 variables : objet et id_objet avec les valeurs des tableaux d’éléments. Nous utilisons |table_valeur sur la #VALEUR pour raccourcir le code et faciliter la mise en place. Un autre choix serait d’utiliser directement la boucle condition dans cette boucle. Cette boucle peut remplacer la boucle de contenu/rubrique.html de Le Squelette Zpip.

  1. <B_elements><div class="liste"><ul class="list-items">
  2. <BOUCLE_elements(POUR){tableau #GET{elements}}{!par date}{pagination 5}>
  3. #SET{id_objet,#VALEUR|table_valeur{id_objet}}
  4. #SET{objet,#VALEUR|table_valeur{objet}}
  5. <INCLURE{fond=inclure/element-resume}{objet=#GET{objet}}{id_objet=#GET{id_objet}}>
  6. </BOUCLE_elements>
  7. </ul></div><B_elements>

Télécharger

Il nous reste enfin à construire le squelette inclure/element-resume.html, cette fois ci en nous servant de la boucle CONDITION. Comme nous l’avons déjà remarqué, ce choix permet de n’avoir qu’un seul fichier à modifier en cas de changement du contenu des éléments de la liste.

  1. <BOUCLE_test_article(CONDITION){si #ENV{objet}|=={article}}>
  2. <BOUCLE_article(ARTICLES){id_article=#ENV{id_objet}}>
  3. <li class="item hentry">
  4. <h3 class="h3 entry-title"><a href="#URL_ARTICLE" rel="bookmark">#TITRE</a></h3>
  5. [<div class="#EDIT{intro} introduction entry-content">(#INTRODUCTION)</div>]
  6. <div class="meta-publi">
  7. <a class="lire-la-suite" href="#URL_ARTICLE"><:lire_la_suite:><span class="lire-la-suite-titre"><:lire_la_suite_de:> <em>#TITRE</em></span></a>
  8. </div>
  9. </li>
  10. </BOUCLE_article>
  11. </BOUCLE_test_article>
  12.  
  13. <BOUCLE_test_breve(CONDITION){si #ENV{objet}|=={breve}}>
  14. <BOUCLE_breve(BREVES){id_breve=#ENV{id_objet}}>
  15. <li class="item hentry">
  16. <h3 class="h3 entry-title"><a href="#URL_BREVE" rel="bookmark">#TITRE</a></h3>
  17. [<div class="#EDIT{intro} introduction entry-content">(#INTRODUCTION)</div>]
  18. <div class="meta-publi">
  19. <a class="lire-la-suite" href="#URL_BREVE"><:lire_la_suite:><span class="lire-la-suite-titre"><:lire_la_suite_de:> <em>#TITRE</em></span></a>
  20. </div>
  21. </li>
  22. </BOUCLE_breve>
  23. </BOUCLE_test_breve>

Télécharger

Un flux RSS mélangeant article et brèves.

Pour ce fichier, nous remplissons le tableaux en effectuant un filtre sur les dates inversées, en effet, nous remplissons le tableau avec un minimum d’élément pour alléger les requêtes sur le serveur. Nous prenons la base du fichier backend.php de squelette-dist sur la version 2.1 de Spip.

Remplissage du tableau :

  1. <BOUCLE_10articles(ARTICLES) {lang ?}{branche ?}{id_mot ?}{id_auteur ?} {par date}{inverse}{0,10}{unique}>
  2. #SET{element, #ARRAY{objet,"article",id_objet,#ID_ARTICLE,date,#DATE}}
  3. #SET_PUSH{elements,#GET{element}}
  4. </BOUCLE_10articles>
  5. <BOUCLE_articles_tres_recents(ARTICLES){lang ?}{branche ?}{id_mot ?}{id_auteur ?} {par date}{inverse}{age<3}{unique}>
  6. #SET{element, #ARRAY{objet,"article",id_objet,#ID_ARTICLE,date,#DATE}}
  7. #SET_PUSH{elements,#GET{element}}
  8. </BOUCLE_articles_tres_recents>
  9. <BOUCLE_10breves(BREVES){lang ?}{branche ?}{id_mot ?}{id_auteur ?}{par date}{inverse}{id_rubrique ?}{lang ?}{id_mot ?}{unique}{0,5}>
  10. #SET{element, #ARRAY{objet,"breve",id_objet,#ID_BREVE,date,#DATE}}
  11. #SET_PUSH{elements,#GET{element}}
  12. </BOUCLE_10breves>
  13. <BOUCLE_breves_tres_recents(BREVES){lang ?}{branche ?}{id_mot ?}{id_auteur ?} {par date}{inverse}{age<3}{unique}>
  14. #SET{element, #ARRAY{objet,"breve",id_objet,#ID_ARTICLE,date,#DATE}}
  15. #SET_PUSH{elements,#GET{element}}
  16. </BOUCLE_breves_tres_recents>

Télécharger

Nous bouclons ensuite sur les éléments comme précédemment, par contre cette fois-ci : nous allons utiliser un test sur le type d’objet : soit avec un test direct et une inclusion [5], soit avec une boucle CONDITION [6].

  • Pour les articles : le test s’effectue via [(#VALEUR|table_valeur{objet}|=={article}|oui) ]
  • Pour les brèves, la boucle CONDITION donne : <BOUCLE_test_breve(CONDITION){si #VALEUR|table_valeur{objet}|=={breve}} />

Ce qui donne, avec un contenu minimum pour les brèves :

  1. <BOUCLE_elements(POUR){tableau #GET{elements}}{!par date}>
  2. #SET{id_objet,#VALEUR|table_valeur{id_objet}}
  3. [(#VALEUR|table_valeur{objet}|=={article}|oui)
  4. <INCLURE{fond=inc-rss-item}{id_article=#GET{id_objet}}>]
  5.  
  6. <BOUCLE_test_breve(CONDITION){si #VALEUR|table_valeur{objet}|=={breve}}>
  7. <BOUCLE_breve(BREVES){id_breve=#GET{id_objet}}>
  8. <item[ xml:lang="(#LANG)"]>
  9. <title>[<:breve:>] [(#TITRE|supprimer_tags|texte_backend)]</title>
  10. <link>[(#URL_BREVE|url_absolue)]</link>
  11. [<guid isPermaLink="true">(#URL_BREVE|url_absolue)</guid>]
  12. [<dc:date>(#DATE|date_iso)</dc:date>]
  13. <dc:format>text/html</dc:format>
  14. [<dc:language>(#LANG)</dc:language>]
  15. <description>[(#INTRODUCTION|liens_absolus|texte_backend)]
  16.  
  17. <BOUCLE_breve_rubrique_mf(RUBRIQUES){id_rubrique}>-
  18. [&lt;a href="[(#URL_RUBRIQUE|url_absolue)]" rel="directory"&gt;(#TITRE|texte_backend)&lt;/a&gt;]
  19. </BOUCLE_breve_rubrique_mf>
  20. </description>
  21. </BOUCLE_breve>
  22. </BOUCLE_test_breve>
  23.  
  24. </BOUCLE_elements>

Télécharger

Vous pouvez télécharger le fichier joint directement pour mettre en place un flux RSS mélangeant brèves et articles dans votre installation de Spip.

Notes

[1article, breve, article syndiqué …

[2#ID_ARTICLE, #ID_BREVE, #ID_SYNDIC_ARTICLE

[3Intégrée à Spip-Bonux

[4Le dernier choix permet de n’avoir qu’un seul squelette à modifier en cas de changement de contenu de la liste, et donc de ne pas oublier l’un des éléments

[5pour les articles

[6pour les brèves

Dernière modification de cette page le 1er mai 2012

Retour en haut de la page

Vos commentaires

  • Le 16 juillet 2014 à 19:43, par phracktale En réponse à : Mélange d’éléments hétérogènes

    Une autre façon de faire pour SPIP 2 et 3 :

    toujours avec des articles et des rubriques numérotés et le plugin SPIP BONUX

    1. #SET{items,#ARRAY{}}
    2.  
    3. <BOUCLE_articles(ARTICLES){id_rubrique}>
    4. [(#SET{item, [(#ARRAY{ordre, #RANG, titre, #TITRE})]})]
    5. [(#SET_PUSH{items,#GET{item}})]
    6. </BOUCLE_articles>
    7.  
    8. <BOUCLE_rubriques(RUBRIQUES){id_parent=#ENV{id_rubrique}}>
    9. [(#SET{item, [(#ARRAY{ordre, #RANG, titre, #TITRE})]})]
    10. [(#SET_PUSH{items,#GET{item}})]
    11. </BOUCLE_rubriques>
    12.  
    13. <B_items>
    14. <ul>
    15. <BOUCLE_items(POUR){tableau #GET{items}}{par ordre}>
    16. <li><a href="[(#VALEUR|table_valeur{url})]">[(#VALEUR|table_valeur{titre})]</a></li>
    17. </BOUCLE_items>
    18. </ul>
    19. </B_items>

    Télécharger

    Répondre à ce message

  • Le 19 novembre 2012 à 06:32, par chris En réponse à : Mélange d’éléments hétérogènes

    Bonjour,

    Est-ce que cette technique pourrait permettre de faire des menus mélangeant articles et rubriques ordonnés ?

    Y a t’il un peu de doc quelque part ?

    Merci

    • Le 19 novembre 2012 à 08:36, par Shnoulle En réponse à : Mélange d’éléments hétérogènes

      Salut,

      Oui, il n’y a pas de raison.

      Première boucle : les articles voulus
      Deuxième boucle : les rubriques voulues
      Troisième boucle : les objets.

      Pour les 2 premières boucles : reprendre la « création du tableau », et ensuite voir selon ce que tu souhaite faire exactement.

      Denis

    Répondre à ce message

  • Le 25 juin 2012 à 10:19, par Markus En réponse à : Mélange d’éléments hétérogènes

    Bonjour,

    Pour une raison que j’ignore, le ficher backend modifié proposé dans cette contrib semble ne plus fonctionner après ma mise à jour SPIP 3... (j’étais sous spip 2.1.13 avant migration).

    Tous les plugins ont été mis à jour.

    Le fichier est vide, alors qu’avec le fichier de la dist (uniquement les articles ou les brves) ça fonctionne.

    Si vous avez une idée, je suis preneur...

    • Le 10 novembre 2012 à 13:53, par Shnoulle En réponse à : Mélange d’éléments hétérogènes

      Salut,

      Je n’ai pas revérifié pour SPIP3, je prépare pour la semaine prochaine.

      Si tu affiche les #TITRE dans les premières boucles, obtient tu quelquechose ?

      Denis

    Répondre à ce message

  • Le 30 août 2012 à 16:32, par Miranda En réponse à : Mélange d’éléments hétérogènes

    Bonjour,

    Merci beaucoup pour cette contribution ! C’est justement ce que je cherchais depuis long temps :) sauf que... je n’arrive pas à bien comprendre le fonctionnement des GET SET ARRAY, etc. (je n’ai as de grandes connaissances des bases de données)...

    Alors, j’ai copié le code indiqué ici (et crée le fichier element-resume), mais j’ai un bug
    « Erreur SQL zbug_doublon_sur_table_sans_cle_primaire » dans squelettes/sommaire.html, boucle elements, ligne 178.

    Quand je regarde la ligne 178, j’ai ça :

    (B_elements)(div class=« liste »)(ul class=« list-items »)

    -  j’ai changé les > par ) -

    Avez vous une idée de pourquoi j’obtiens ce bug ? Où qu’est ce que cela veut dire ?

    Merci de votre aide :)

    Ah ! J’utilise SPIP 3.0.4 [19781] et je suis en local avec MAMP

    Répondre à ce message

  • Le 1er mai 2012 à 19:31, par Beurt En réponse à : Mélange d’éléments hétérogènes

    Salut !

    Merci beaucoup pour cette Contrb’ !

    Connaissais-tu la méthode pour mélanger des objets éditoriaux (articles et rubriques dans l’exemple) proposée par Arno* ? : http://www.paris-beyrouth.org/tutor...

    Elle me semble plus simple à mettre en œuvre (code plus lisible, pas de dépendance à un plugin). D’ailleurs je l’utilise depuis quelques années déjà pour faire mes flux RSS et ma page de news.

    Quels seraient les avantages de ta méthode sur le sienne ?

    • Le 18 mai 2012 à 16:34, par Shnoulle En réponse à : Mélange d’éléments hétérogènes

      Salut,

      Oui je connais les différentes méthodes ( voir le PS de l’article d’origine

      Une méthode pour mélanger autant de type d’éléments voulus et de se servir de toutes les possibilité des boucles, par exemple la pagination.

      Les solution de tetue et de ARNO* permettent de méllanger mais : comment faire avec 3 types d’éléments ?
      Comment faire les paginations ?
      Comment limiter par nombre total d’éléments ?

      A l’origine je l’ai fait pour un client qui voulait mélanger : lien de flux RSS, articles et brèves.
      Je ne m’en suis pas sorti avec la méthode de tetue ou Arno*.
      Denis

    • Le 18 mai 2012 à 17:03, par Beurt En réponse à : Mélange d’éléments hétérogènes

      Salut, C’est sûr qu’avec la contrib’ d’Arno* tu ne peux pas utiliser toutes les fonctions des boucles (comme la pagination ou limiter le nombre d’item).

      Merci pour ta réponse !

    • Le 19 mai 2012 à 20:12, par Shnoulle En réponse à : Mélange d’éléments hétérogènes

      Désolé pour le délais, mais je recois plus les alertes sur les forum :).

      Denis

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

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

  • Mailsubscribers

    16 janvier 2013 – 274 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes (...)

  • noiZetier v2

    9 novembre 2012 – 36 commentaires

    Le noiZetier offre une interface d’administration permettant d’insérer au choix des éléments modulaires de squelettes (noisettes) et de les ajouter ainsi à ses squelettes. Compatibilité La version 2 du noizetier fonctionne sous SPIP 3. Elle est (...)

  • cirr : plugin « rédacteur restreint »

    29 octobre 2010 – 60 commentaires

    Ce plugin « cirr : rédacteur restreint » permet d’affecter des rubriques aux rédacteurs et modifie les droits afin qu’un rédacteur restreint (ou un administrateur restreint) voit dans l’espace privé uniquement les rubriques qui lui sont affectées (et leur (...)

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

  • Métas +

    3 décembre – 14 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

Ça spipe par là