Drupal – Rules – Dépublier un noeud après une durée donnée x jours, secondes…

Voici un petit howto qui va vous expliquer comment dépublier un noeud après une durée donnée qui peut être en jours, en secondes… sous Drupal à l’aide du module Rules

Tout d’abord, qu’est ce que le module Rules ?

Rules peut être considéré comme une évolution du module core trigger et la version améliorée pour drupal 6 de Workflow-ng de Drupal 5.

Rules permet, à la découverte d’événements, d’exécuter des actions (publier un commentaire, envoyer un mail…) automatiquement avec la possibilité de passer des conditions.

Voici donc un petit howto permettant de dé-publier un contenu après une durée donnée, ça peut être 15 jours, 30 secondes, le lundi 30 mars…

Tout d’abord, il faut installer le module Rules.

1. Création de Rule Sets

Allez dans /admin/rules/rule_sets

  • Cliquer sur « Add a new rule set ».
  • Ajouter un titre, par exemple « Unpublish content {rule set} » et avec pour nom machine-readable « unpublish_content ».
  • Dans la partie Arguments, sélectionner « Content » comme type de données, entrer « Content {argument} » en tant que titre et « unpublish_content_content » en tant que nom machine readable.
  • Sauvegarder ensuite votre formulaire
  • Vous allez être redirigé vers la vue d’ensemble des rules sets et vous pourrez y voir le rule set que vous venez de créer.
  • Cliquer donc sur celui-ci et ajouter une nouvelle rule en cliquant sur l’onglet « Add new rule »
  • Ajouter un titre comme par exemple « Unpublish action {rule} » et cliquer sur Sauvegarder.
  • Vous allez ensuite être sur une page d’édition de la rule cliquer sur « Add an action ».
  • Vous allez avoir une liste de sélection, vous devrez choisir « Node|Retirer le contenu de la publication » (et NON « Rule Set|Publish content »!) et confirmer en cliquant sur Suivant.
  • Vous n’avez rien à faire normalement sur le formulaire sur lequel vous avez été dirigé, hormis changer le titre et de mettre « Unpublish content {action} » pour suivre plus facilement et enfin sauvegarder.
  • Aller sur la page admin/rules/rule_sets et cliquer sur votre rule (Unpublish content {rule set})
  • Puis cliquer sur l’action (Unpublish action {rule}) pour l’éditer
  • Ajouter une action et sélectionner « Schedule Unpublish content »
  • Choisissez l’identifiant [unpublish_content_content:nid] si vous avez respecter les termes que j’ai utilisé, sinon adapter à nom machine readable donné précédemment dans la partie Arguments.
  • Paramétrer la date d’exécution, par exemple 2010-02-12 10:33:55 ou « +1 day », vous pouvez vous référer aux formats PHP strtotime()

2. Création du ou des déclencheurs (trigger)

Allez dans /admin/rules/trigger

  • Cliquer sur « Add a New Rule »
  • Choisissez pour label « Dépublier un contenu {triggered rule} »
  • Sélectionner « Node|After saving new content », puis sauvegarder
  • Ajouter une action
  • Sélectionner « Rule Scheduler|Schedule Unpublish content {rule set} »
  • Ajouter une condition « Node|Content is published »
  • Vous pouvez également ajouter une condition pour un type de contenu donné, pour cela ajouter une nouvelle condition
  • Et choisissez « Node|Content as Type » et choisissez votre ou vos types de contenu.

Voilà, votre règle est crée et sera exécuté à chaque passage du cron.

J’espère que ce petit tuto aura permis de vous aider un peu 😉

J’espère pouvoir en faire d’autres bientôt sur Rules…

Et vous avez vous d’autres méthodes ?

Author: Pierre-Yves Dubreucq

Passioné par les logiciels libres depuis 2001, je suis VP Bare Metal (Dedibox) chez Scaleway. Je tiens ce blog depuis 13 ans avec beaucoup moins d'assiduité malheureusement qu'à ses débuts, mais bon, le temps est une denrée rare.

Share This Post On

10 Comments

  1. Il y a un module Drupal qui fait cela : scheduler.
    Il permet de publier / dépublier un article à une date donnée

    Post a Reply
  2. Bien le bonjour @Vincent,
    Ceci explique pourquoi je ne comprenais pas pourquoi je ne trouvais pas d’exemple pour faire ça avec rules, alors que ça semblait si élémentaire 😉
    Un grand merci, mon article en devient quasiment obsolète 🙂
    Mais bon, ça pourra peut-être servir à quelqu’un qui souhaite utiliser rules ?? lol
    En tout cas, maintenant je sais presque m’en servir 😉
    Bonne journée

    Post a Reply
  3. Re,
    Je viens d’installer Scheduler, et ça ne colle pas à mes besoins.
    J’ai besoin de fixer une date de durée de publication par défaut sans laisser aux créateurs des noeuds la possibilité de gérer eux-même
    Par contre, je pourrais utiliser rules pour remplir automatiquement les champs rajoutés par le module scheduler.
    Merci quand même 😉
    Bonne journée.

    Post a Reply
  4. Magnifique juste ce que je cherchais!

    Post a Reply
  5. Attention @Angelo il y a beaucoup plus simple que cette Rules finalement pour réaliser le besoin.
    Reviens vers moi si besoin

    Post a Reply
  6. Hello,

    merci pour ton retour 😉

    Tu passes tjs par les rules?

    Tu peux m’en dire plus?

    Merci

    Post a Reply
  7. En fait, je me suis trompé, j’ai confondu avec une autre rules que j’avais créée de la même façon et qui me posait pb pour retirer des points à la création de contenu…
    Donc oublies mon précédent commentaire…
    Désolé 😉
    N’hésites pas à revenir vers moi si question.
    CiaO ++

    Post a Reply
  8. Ton exemple semble proche de ce que je voudrais , à savoir changer le terme d’un vocabulaire associé à un contenu tous les 45 jours par exemple.
    Je ne sais pas si tu y as pensé.Moi je vais essayer en me basant sur ton exemple

    🙂

    Post a Reply
  9. Bonjour.

    Je n’ai pas encore plongé dans Rules, mais voilà, j’ai une question!

    Je veux offrir à mes utilisateurs trois options:
    – faire une annonce pour 2 semaines;
    – faire une annonce pour un mois
    – faire une annonce pour trois mois.

    Je fais donc un champ obligatoire «texte» (menu déroulant) contenant ces trois possibilités.

    J’anticipe dans Rules une fonction (« si/alors ») : si l’utilisateur fait le choix de publier pour un mois (choix «2»), alors dépublier le contenu 30 jours après la date de publication. Etc.

    Est-ce réalisable sans devoir gaver Rules de PHP?

    Peut-on également envoyer un petit message pour dire à l’utilisateur: « Mec, ton annonce est expirée!» ?

    Et pour donner à l’utilisateur la possibilité de republier son annonce, ya un module pour ça?

    Merci! Et bonne année 2016!

    H217

    Post a Reply

Submit a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *