Comment exclure des articles ?

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Vous pouvez souhaiter, pour quelque raison que ce soit, ne pas présenter certains articles dans votre page d’accueil ou vos entêtes de rubrique.

Deux moyens vous permettront d’y parvenir :
-  En plaçant l’ensemble des articles à exclure dans une rubrique ou un secteur ;
-  En affectant un mot-clé à chaque article à exclure.

Avantages & Inconvénients

-  En regroupant les articles à exclure dans une même rubrique ou dans un même secteur, vous simplifierez la structure de vos boucles SPIP, mais vous devrez vous limiter à une seule rubrique ou un seul secteur pour y placer vos articles à exclure ;

-  Le recours au mot-clé/groupe de mots-clés apporte une plus grande souplesse puisque les articles à exclure peuvent côtoyer les articles standards dans les différentes rubriques du site.
En contrepartie, la construction des boucles SPIP sera plus délicate ; les exemples ci-dessous vous aideront à mieux comprendre les conditions de (bon) fonctionnement.

Exemples s’appuyant sur rubrique/secteur

Tous les articles, sauf ceux de la rubrique n°15
<B_rubout>
<h3>Tous les articles, sauf ceux de la rubrique '15'</h3>
<ol>
<BOUCLE_rubout(articles){id_rubrique!=15}{par id_rubrique}>
<li><b>#ID_ARTICLE</b> - #TITRE (secteur n°#ID_SECTEUR, rubrique n°#ID_RUBRIQUE)</li> 
</BOUCLE_rubout>
</ol><hr> 
</B_rubout>
Tous les articles, sauf ceux du secteur n°3
<B_sectout>
<h3>Tous les articles, sauf ceux du secteur '3'</h3>
<ol>
<BOUCLE_sectout(articles){id_secteur!=3}{par id_secteur}>
<li><b>#ID_ARTICLE</b> - #TITRE (secteur n°#ID_SECTEUR, rubrique n°#ID_RUBRIQUE)</li> 
</BOUCLE_sectout>
</ol><hr> 
</B_sectout>

Exemples s’appuyant sur mot-clé/groupe de mots-clés

On supposera que les articles à exclure sont tous associés au mot-clé ’invisible’, lequel mot-clé appartient au groupe de mots-clés ’Exclure’.

Si l’on se contente d’écrire :

Tous les articles, sauf ceux associés au mot-clé ’invisible’
<B_exclus>
<h3>Tous les articles, sauf ceux 'invisibles'</h3>
<ol>
<BOUCLE_exclus(articles){titre_mot=!invisible}{par id_article}>
<li><b>#ID_ARTICLE</b> - #TITRE (secteur n°#ID_SECTEUR, rubrique n°#ID_RUBRIQUE)</li>
</BOUCLE_exclus>
</ol><hr>
</B_exclus>

On n’obtiendra que les articles associés à un mot-clé différent de ’invisible’, et les articles sans mot-clé ne seront donc pas affichés !

Pour effectivement parvenir au résultat souhaité, il faut combiner deux boucles SPIP et s’appuyer sur le filtre {doublons} (merci, Fil) comme dans l’exemple ci-dessous.

Une première boucle liste les articles associés au mot-clé. Ce faisant, ils ne seront plus éligibles dans la seconde boucle grâce au filtre {doublons}... Et le tour est joué !

Tous les articles, sauf ceux associés au mot-clé ’invisible’
<B_exclus>
<!-- <h3>Les articles associés au mot-clé 'invisible'</h3>
<ol> -->
<BOUCLE_exclus(articles){titre_mot=invisible}{doublons}{par id_article}>
<!-- <li><b>#ID_ARTICLE</b> - #TITRE (secteur n°#ID_SECTEUR, rubrique n°#ID_RUBRIQUE)</li> -->
</BOUCLE_exclus>
<!-- </ol><hr> -->
</B_exclus>

<B_show>
<h3>Tous les articles, sauf 'invisibles'</h3>
<ul>
<BOUCLE_show(articles){tout}{doublons}{par id_article}>
<li><b>#ID_ARTICLE</b> - #TITRE (secteur n°#ID_SECTEUR, rubrique n°#ID_RUBRIQUE)</li>
</BOUCLE_show>
</ul><hr>
</B_show>


NOTA BENE : pour exclure les articles associés au groupe de mots-clés ’Exclure’, il vous suffit de reprendre l’exemple ci-dessus et remplacer le filtre {titre_mot=invisible} par {type_mot=Exclure}

Discussion

14 discussions

  • Comment faire pour ne pas afficher les articles sous un secteur parent mais si les afficher sur ses sousrubriques ?

    J’ai aussi essayé avec le plugin Exclure-secteur, mais là non plus j’ai trouvé une solution.

    Voilà mon site en spip 2.0.9 : www.eclecticadv.net

    Répondre à ce message

  • Bonjour,

    Pour ne pas devoir encoder un numéro de rubrique, j’ai voulu exclure des articles dont le mot-clé de la rubrique parente est espace membres.

    Le but serait par exemple de ne pas afficher dans le sommaire les articles de la rubrique espace membres géré par un accès restreint.

    J’ai combiné une boucle RUBRIQUES et une boucle ARTICLES avant le sommaire des 5 derniers articles publiés.

    <!-- DEBUT BOUCLE_exclure_espace_membre-->
    <BOUCLE_exclure_espace_membre(RUBRIQUES){titre_mot=espace membres}>
            <BOUCLE_articles_a_exclure(ARTICLES){id_rubrique=#ID_RUBRIQUE}{doublons}{par id_article}{exclus}>
            </BOUCLE_articles_a_exclure>
    </BOUCLE_exclure_espace_membre>
    <!-- FIN BOUCLE_exclure_espace_membre-->

    et cela marche ! C’est génial !

    Répondre à ce message

  • 2

    Seul souci avec cette méthode : quand on a une grande quantité d’articles exclus (parce qu’on a tout simplement une grande quantité d’articles sur le site), spip génère une méga requête avec des NOT IN(1,2,3,4,...etc) sur des lignes et des lignes...

    Quel dommage que le {id_mot != toto} ne prenne en compte que les articles ayant effectivement un mot clé !
    Une piste que j’essaierai lundi : {id_mot != toto ?}

    • SPIP 2.0 permet d’écrire {!id_mot=xx} qui exclu tous les articles liés au mot xx

    • Ouais, ben dommage que ça ne soit pas possible en 1.9.2x parce que je ne pourrai pas migrer le site en 2.0 avant plusieurs mois...

      D’ailleurs au passage, rien à voir, mais impossible de trouver la release note de la version 1.9.2f.

    Répondre à ce message

  • 1

    perso, je ne souhaiterais virer qu’un article d’une boucle, le plus récent, et de manière récurrente. Existe-t-il un moyen de le faire ?

    • Bonjour,

      Avec ces boucles tu peux afficher les articles de ton site sauf le plus récent :

      <BOUCLE_articles_exclure_dernier(ARTICLES) {par date}{inverse} {0,1} {doublons}></BOUCLE_articles_exclure_dernier>
      <BOUCLE_articles_recents_sauf_le_dernier(ARTICLES) {par date}{inverse} {doublons}>
      tes balise pour afficher les autres articles
      </BOUCLE_articles_recents_sauf_le_dernier>

      La première boucle va sélectionner l’article le plus récent pour l’exclure de la deuxième boucle. La deuxième boucle va afficher les autres articles. Pour adapter ça à une rubrique il suffit d’ajouter le critère id_rubrique.

      Voir le lien pour comprendre le principe de la boucle « exclure ».

      Bon courage ++

    Répondre à ce message

  • 2

    Moi je suis nouveau de chez nouveau, et je comprend pas ou mettre les boucles. La boucle pour permettre d’exclure des articles de la page d’accueil, je dois la mettre dans le fichier articles.html non ? le probleme c’est que j’en ai plusieurs des fichiers articles.html et ce dans les dossier suivant :

    dans le dossier dist
    dans le dossier plugin/squelette egt
    dans le dossier themes/alternative
    dans le dossier plugins habillage/alternative

    et si jamais c’est dans le fichier sommaire que je dois le mettre et bien j’en ai aussi plusieurs aux mêmes endroit.

    Bref je nage un 400 metres 4 nages

    help me please

    • Salut Éric,

      Avant de se lancer dans un 400 m 4 nages, tu conviendras qu’il faut d’abord apprendre la brasse, le crawl, le dos et la nage papillon... Avec SPIP, c’est pareil : je te recommande de potasser la documentation en ligne décrivant les boucles et leur mode de fonctionnement avant de t’attaquer à un sujet un peu « pointu » comme celui-ci. N’essaie pas de bruler trop d’étapes, l’acquisition des bases est impérative. Si tu es à l’aise avec la programmation Web, tu comprendras assez vite la mécanique de SPIP.

      Quant à cet article, il est assez ancien et était valide jusqu’à la version 1.7.x : je ne suis pas passé à une version plus récente, faute de disponibilité suffisante. Jusqu’en v1.7.x, la modification de la page d’accueil se faisait via le fichier « sommaire.html » placé dans la racine du site ; je suppose que tu es dans une version beaucoup plus récente car les dossiers « plugin/ » et « themes/ » me sont inconnus.

      A toute fin utile, je te joins l’adresse du site expliquant les boucles de SPIP.

      Bon courage,

      Richie

    • le probleme c’est que j’en ai plusieurs des fichiers articles.html et ce dans les dossier suivant :
      dans le dossier dist dans le dossier plugin/squelette egt dans le dossier themes/alternative dans le dossier plugins habillage/alternative
      et si jamais c’est dans le fichier sommaire que je dois le mettre et bien j’en ai aussi plusieurs aux mêmes endroit.

      Tu peux citer exactement la hiérarchie de dossiers que tu as ? Quels plugins tu as activés ?

      « plugin/squelette egt », « themes/alternative » et « plugins habillage/alternative » ne me semblent pas être des citations orthodoxes (soit plus rigoureux si tu veux une réponse rigoureuse stp).

    Répondre à ce message

  • 3

    Je dois être nul !

    Je voudrais sur ma page sommaire afficher les 5 derniers articles du site mais en excluant ceux de la rubrique 17.

    J’ai donc fait cette boucle :

    <BOUCLE_dernier_article (ARTICLES){id_rubrique!=17}{0,5}{par date}{inverse}{doublons}>

    et ça m’affiche les 5 derniers articles de TOUTES les rubriques !

    Si quelqu’un peut me dire où j’ai fait l’erreur, merci !

    • C’est encore moi, désolé de pas avoir mis de nom.

      Bon, j’ai essayé avec les mots clés et j’ai testé ça

      <BOUCLE_exclure_rubriques(RUBRIQUES){titre_mot=invisible}>
              <BOUCLE_exclure_articles (ARTICLES){doublons}>
              </BOUCLE_exclure_articles>
      </BOUCLE_exclure_rubriques>
      
      <BOUCLE_dernier_article (ARTICLES){0,5}{par date}{inverse}{doublons}>

      et le reste de ma boucle dernier_article ensuite

      et je n’obtiens ... rien !

      J’ai donc essayé de mettre id-rubrique après (ARTICLES) de la boucle exclure_articles et là j’ai ... les articles de toutes les rubriques.

      Grrr, au secours !

    • Le plus simple est d’exploiter le mot-clé « unique » (ou doublon, c’est la même chose) pour obtenir tous les articles de la rubrique 17 sans les montrer, puis de faire une seconde boucle listant les 5 articles les plus récents du site. Comme ceux de la rubrique 17 ont déjà été affichés, ils n’apparaîtront pas dans la seconde boucle.

      Exemple :

      <BOUCLE_rub17(articles) {id_rubrique=17} {unique}>
      <!-- article caché : #ID_ARTICLE -->
      </BOUCLE_rub17>
      <BOUCLE_top5(articles) {tout} {unique} {par date} {0,5}>
      Article présenté : #ID_ARTICLE 
      </BOUCLE_top5>

      Cela répond-il à ton besoin ?

      Richie

    • Salut rajoute le critère tout....

    Répondre à ce message

  • 1
    verdecejo

    Comment afficher des articles qui apartien a une rubrique different a cella del article present ?

    j’essaié ecrire dans article.html :

    <B_articulos_autor>
    <BOUCLE_articulos_autor(ARTICLES) id_rubrique !=#ID_RUBRIQUE par date tout>
    <a href=« #URL_ARTICLE » [title=« (#DESCRIPTIF|textebrut|entites_html) »]>#TITRE</a>

    </BOUCLE_articulos_autor>
    </B_articulos_autor>

    mais il ne marche pas.

    • Personnellement, je traite ce besoin en passant par un autre squelette SPIP que je charge par commande <INCLURE> pour construire un menu de navigation avec toutes les rubriques du site, par exemple.

      En procédant ainsi, on sort le squelette du contexte initial.
      Revers de la médaille : il faut transmettre l’ID de la rubrique ou de l’article si l’on veut maintenir ce contexte.

    Répondre à ce message

  • francois

    Bonjour à tous,
    pour mon moteur de recherche j’utilise la boucle suivante :


    je voudrais modifier cette boucle pour qu’en passant un argument par l’url je puisse limiter la recherche aux articles d’une ou plusieurs rubriques.
    mes tentattives avec l’ajout
    d’un critere id_rubrique ne marchent pas.quelqu’un a til une idée ?
    ps:j’utilise spip 1.7.2

    Répondre à ce message

  • 1
    yakari

    Et ce qui a été très pratique pour moi :
    Utiliser une expression régulière pour inclure des articles specifiques

    BOUCLE_mes_articles_choisis(articles)id_article==^(1|4|9|12|15)$

    pour n’inclure que les articles 1, 4, 9, 12 et 15

    • Salut !

      La question étant « comment exclure des articles » ta solution la contourne par l’inverse ... Moi je cherche le moyen de faire disparaître UN article (l’édito) de la liste qui apparaît dans la rubrique ainsi que sur le plan.

      Mais comme je ne sais pas combien d’article il y aura dans la rubrique je trouve ça un peu chaud de devoir écrire tous les articles à inclure plutôt qu’un seul à exclure ...

    Répondre à ce message

  • Je ne sais pas si je suis au bon endroit mais je cherche à faire quelque chose de précis et je n’y arrive pas.
    J’explique :
    J’ai sur ma page article.html 2 tableaux.
    -  Le 1er contient les documents joints en mode document
    -  Le 2e contient les documents joints en mode image

    Je voudrais que le 2e tableau ne s’affiche que si la rubrique de l’article correspondant soit une rubrique spécifique.

    LA boucle de mon 2e tableau :

    BOUCLE_portfolio(DOCUMENTS)id_articlemode=imagedoublons

    J’ai testé de faire une boucle supplémentaire à l’intérieur de la première et ça : (DOCUMENTS) id_article id_rubrique==43 mais je n’arrive à rien.
     :(
    Please help ....

    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

Dernière modification de cette page le 8 mai 2003