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

Dernière modification de cette page le 14 novembre 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>

    Répondre à ce 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 !

    Répondre à ce 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.

    Répondre à ce message

Ajouter un commentaire

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom