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

Publié le 11 février 2010 par Pydubreucq

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 ?