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

  • 1
    madrilene

    Euh oui mais dans le détail il y a quand même un truc qui cloche, c’est que
    si je dois afficher une balise (#titre, sous titre ou autre) des articles
    liés au mot clef excluant pour ne pas les selectionner par la suite ca peut etre génant si on veut qu’il y ait aucune trace des articles à éliminer !! Dans l’exemple la première boucle excluante, affiche le
    titre et j’ai l’impression que le doublon ne marche que si une balise est
    affichée , non ?

    • Non, il n’y a pas d’obligation à insérer une quelconque balise : une boucle SPIP vide suffit. L’exemple proposé sert à constater, de visu, que les articles que l’on veut exclure le sont bien. Une fois ce point réglé, il suffit de supprimer cette trace.

      Un essai te rassurera ;-)

    Répondre à ce message

  • 2

    Salut les Spipeurs géniaux ;))

    question complémentaire (à celle de ne pas faire paraitre les articles « parasites » dans les pages), ... celle de ne pas envoyer l’annonce d’un article dans les Nouveautés par mail = nous avons activé cette fonction d’annonce, nous publions les articles « gris » dans une rubrique cachée MAIS patatras les articles partent par mail quand même Arggghhh ... une soluce ?? Merci B-)

    • C’est tout frais et sans garantie immédiate de bon fonctionnement parce que je n’ai pas pu le vérifier, mais voici la boucle ajoutée dans le fichier « nouveautes.html » :

      <BOUCLE_nv1excl(ARTICLES){type_mot=Exclure}{unique}{age_relatif<=0}{par date}{inverse}{0,30}>
      </BOUCLE_nv1excl>
      <BOUCLE_nv1(ARTICLES){unique}{age_relatif<=0}{par date}{inverse}{0,30}>
      (...)

      La 1re boucle est supposée identifier les articles ’gris’, la seconde ne les reprend pas grâce à l’argument « unique » présent dans les deux boucles.

      Même principe pour les brèves...

      Amicalement,

      Richard

    • Un petit complément d’information : la boucle « <BOUCLE_nv1excl(ARTICLES)... » doit être placée à l’EXTERIEUR de « <BOUCLE_nv1... », plus précisément AVANT la balise « <B_nv1> », sans quoi plus aucun mail ne sera diffusé.

      Aucun message d’erreur n’est affiché en cas de problème lors de la génération du mail des nouveautés.

      Richie

    Répondre à ce message

  • 2
    Christophe

    Plus simplement, on peut jouer sur les dates de publication des articles.
    Les articles non désirés sont publiés et ensuite on change la date de publication, en l’année 2000 par exemple.
    Pour faire apparaître les articles standards, on met la condition que les articles doivent être publiés depuis 2001 par exemple.

    • cest une bonne idee

    • Le besoin que je cherchais à satisfaire était de ne pas afficher en page d’accueil des articles sans intérêt général (activity reports) créés chaque semaine en telle quantité qu’il n’y avait plus de place pour les articles ’de fond’.

      Avec la méthode proposée, la page d’accueil n’est plus phagocytée par les ’activity reports’ et ces derniers sont visibles dans leur rubrique dédiée.

    Répondre à ce message

  • 1
    Thierry Gagnon

    Si ça ne marche pas (comme il m’est arrivé), essayez titre_mot !=invisible au lieu de titre_mot= !invisible.

    L’astuce serait de mettre le point d’exclamation AVANT le signe égal... :P

    • Hélas, comme je l’indiquais dans l’article, l’expression que tu proposes ne retournera que les articles AYANT un mot-clé DIFFERENT du critère de sélection. Autrement dit, les articles sans mot-clé associé ne seront PAS sélectionnés par la boucle SPIP.

      Quant au critère « titre_mot= !invisible », il s’agit d’une erreur de saisie : les tests ont bien été faits avec « titre_mot !=invisible ». Toutes mes excuses :-p

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

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

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