Multirubricage ou comment faire apparaître un article dans plusieurs rubriques

SPIP permet d’associer un article à une seule rubrique. Toutefois, il est possible de faire apparaître un article également dans une (ou plusieurs) autre rubrique en affectant un même mot-clé à l’article et à la rubrique cible et en ajoutant quelques boucles dans le squelette des rubriques.
Ceci permet d’afficher des articles classés par thématique dans une rubrique transversale. Par exemple, on peut regrouper artificiellement dans une rubrique « Dossiers », différents articles dispersés sur le site.

Pour simuler un multirubricage, il convient de procéder de la manière suivante :

a) créer un groupe de mots clés intitulé « _multirubricage ». Il est indispensable que les mots-clés de ce groupe puissent être associés aux articles et aux rubriques (cochez « articles » et cochez « rubriques »). Ne pas cocher « On ne peut sélectionner qu’un seul mot-clé à la fois dans ce groupe ». En effet, cela permettra de faire apparaître un article dans plusieurs autres rubriques.

b) dans ce groupe de mots, créer les mots-clés de votre choix (par exemple « Dossiers », etc.). Il est plus simple de choisir comme mot-clé le titre de la rubrique cible (par exemple on crée un mot-clé « Dossiers » et on crée une rubrique dont le titre est « Dossiers »).

c) affecter à la rubrique cible le mot-clé correspondant ( par exemple on affecte le mot-clé « Dossiers » à la rubrique dont le titre est « Dossiers »).
ATTENTION : la rubrique cible doit contenir au moins un article qui lui est directement rattaché, sinon elle ne sera pas publiée.

d) affecter, aux articles que l’on souhaiterait voir également figurer sous la rubrique ciblée, le mot-clé correspondant (par exemple on affecte le un mot-clé « Dossiers » à plusieurs articles) .

e) Dans le squelette des rubriques, ajouter une boucle pour les articles issus d’autres rubriques par simulation de multirubricage :

<!-- boucle des articles issus d'autres rubriques par simulation de multirubricage -->
<BOUCLE_mot_multirubricage(MOTS){id_rubrique}{type=_multirubricage}>
<BOUCLE_article_multirubricage (ARTICLES){id_mot}{par date}{inverse}>
<div>
<a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a>
<p>[(#INTRODUCTION)]</p>
</div>
</BOUCLE_article_multirubricage>
</BOUCLE_mot_multirubricage>

Le fonctionnement est simple. On recherche tout d’abord le mot-clé du groupe « _multirubricage » qui a été affecté à la rubrique puis on recherche les articles qui ont ce même mot-clé.
A noter que seul l’intitulé du groupe de mots-clés (« _multirubricage ») figure dans le squelette. Les mots-clés ne figurent pas, aussi il n’est pas nécessaire de modifier le squelette à chaque création de mot-clé.
Si l’on souhaite utiliser plusieurs groupes de mots, il suffit de mettre {type=^[_multirubricage]} au lieu de {type=_multirubricage} et de faire commencer le titre des groupes de mots par “_multirubricage”.

Remarque
Variante qui utilise un SET/GET :

<!-- boucle des articles issus d'autres rubriques par simulation de multirubricage -->
#SET{ci_mots, #ARRAY{}}
<BOUCLE_mot_multirubricage(MOTS){id_rubrique}{type=_multirubricage}>
[(#SET{ci_mots, #GET{ci_mots}|push{#ID_MOT}})]
</BOUCLE_mot_multirubricage>

<BOUCLE_article_multirubricage (ARTICLES){id_mot IN #GET{ci_mots}}{par date}{inverse}>
<div>
<a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a>
<p>[(#INTRODUCTION)]</p>
</div>
</BOUCLE_article_multirubricage>

Portfolio

updated on 14 November 2016

Discussion

13 discussions

  • 1

    Bonjour,

    J’utilise avec succes votre contribution. en revanche, elle semble etre incompatible avec une autre contrib qui permet d’afficher directement l’article si il n’y a qu’un seul article dans la rubrique (ici). En effet, si les 2 contrib sont en place, la simulation de multirubricage fait qu’il n’est considere qu’un seul article dans la rubrique, d’ou le conflit.

    Auriez vous une solution ?

    D’avance merci

    • Si on affecte un seul mot-clé du groupe “_multirubricage” à la rubrique, alors une piste pourrait consister à :

      a) affecter aux articles propres à la rubrique, le mot-clé correspondant (par exemple « Dossiers », etc.) afin qu’ils apparaissent dans la boucle relative au multirubricage.

      b) enlever la boucle des articles de la rubrique

      c) appliquer une contribution pour afficher directement l’article si il n’y en à qu’un seul à afficher.

      Cela pourrait donner par exemple le code suivant :

      <BOUCLE_mot_multirubricage(MOTS){id_rubrique}{type=_multirubricage}>
      
      <!-- rediriger directement sur l’article si il n’y en à qu’un seul à afficher -->
      <BOUCLE_nb_article (ARTICLES){id_mot}{par date}{inverse}>
      <?php $k="#URL_ARTICLE"; ?>
      </BOUCLE_nb_article>
      <?php if ('#TOTAL_BOUCLE'==1) header("location:$k");?>
      </B_nb_article>
      
      <!-- boucle des articles par simulation de multirubricage -->
      <BOUCLE_article_multirubricage (ARTICLES){id_mot}{par date}{inverse}>
      <div>
      <a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a>
      <p>[(#INTRODUCTION)]</p>
      </div>
      </BOUCLE_article_multirubricage>
      
      </BOUCLE_mot_multirubricage>

    Reply to this message

  • 2

    Bonjour,

    J’utilise avec succès cette contribution pour des rubriques qui se situent sur le même niveau de profondeur.
    Mais échec total pour des rubriques qui sont sur des niveaux différents.

    Une idée peut-être ?

    • La contribution fonctionne même avec des articles situés dans des
      rubriques qui sont sur des niveaux différents.

      Merci de décrire précisément un cas qui pose problème et de copier / coller les boucles utilisées.

    • Ok ma faute !
      J’ai attribué le mot clé à 2 rubriques au lieu de la rubrique cible et de l’article source...
      Et comme je n’affiche rien sur la rubrique dans ma boucle, c’est donc un affichage vide que j’obtenais.
      Tout est ok pour moi maintenant.
      Merci et heureux de constater la vitesse pour obtenir une réponse ici !

    Reply to this message

  • 2

    Bonjour,

    Dans mon site, j’ai deux rubriques dont le contenu se croise :
    -  Hébergement>hôtel>mes articles
    -  Annuaire>Restaurants, snacks, café>mes articles

    En fait, certains hôtels font aussi restaurant et j’aurais aimé que ces
    articles apparaissent aussi dans ma rubrique restaurant.

    Pour celà j’ai crée un groupe de mots-clés “multirubricage” (sur l’exemple que vous avez fourni) où j’y ai créé
    le mot-clé “restaurant” que j’ai assigné à tous les articles devant figurer dans la rubrique restaurant (mêmes à ceux se situant dans la rubrique “hôtels”).

    Ensuite, j’au ajouté au fichier “rubrique.html” la boucle suivante :

    <!-- boucle des articles issus d'autres rubriques par simulation de 
    multirubricage -->
    
    <BOUCLE_mot_multirubricage(MOTS){id_rubrique}{type=multirubricage}>
    
    <BOUCLE_article_multirubricage (ARTICLES){id_mot}{par date}{inverse}>
    
    <h3>
    [<a href="#URL_ARTICLE" 
    [title="(#DESCRIPTIF|supprimer_tags|attribut_html)"]>(#TITRE|supprimer_numero)</a>]</h3>
    [<p class="intro">(#TEXTE|textebrut|couper{500}) <a href="#URL_ARTICLE" 
    class="spip_in" 
    title="[(#TITRE|supprimer_numero|supprimer_tags|attribut_html)]">lire la 
    suite</a></p>]
    
    </BOUCLE_article_multirubricage>
    
    </BOUCLE_mot_multirubricage>

    Hélas, je n’obtiens rien. Est-ce que quelqu’un pense pouvoir m’aider ?

    Didi.

    • Il faut affecter à la rubrique le mot-clé correspondant. A noter que la rubrique cible doit contenir au moins un article qui lui est directement rattaché, sinon elle ne sera pas publiée.

    • Merci, j’ai en plus eut un problème sur le serveur qui est à présent réglé mais il avait généré plusieurs bugs inexplicables en fait.

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom