Envoyer une notification par e-mail lorsqu'un nouveau commentaire est publié

15

J'utilise Drupal 8.1 avec les règles 8.x-3.0-alpha1.

Je souhaite créer une règle pour envoyer un e-mail à l'auteur d'un nœud lorsqu'un nouveau commentaire est publié sur ce nœud. Le problème est que je n'ai pas obtenu l'adresse e-mail de l'auteur avec des règles car le jeu de données ne me donne que ces valeurs: @ node.node_route_context: node ou comment mais sous comment je n'ai rien trouvé comme comment: node: author. Dans Drupal 7, j'ai ces données. Que dois-je faire dans Drupal 8?

lolhonk
la source
Le statut alpha des règles peut signifier que cette fonctionnalité n'est pas encore implémentée, vous obligeant à la corriger vous-même.
Bojan Zivanovic
1
Merci mais cela semble être un problème du module de jeton. Parce que d'autres modules comme la notification d'entité ne reçoivent pas l'auteur: mail aussi. Ce jeton semble cassé.
lolhonk

Réponses:

5

Réponse mise à jour

En testant cela sur une nouvelle installation de Drupal 8 avec des règles (Alpha 2), je suis tombé sur un bug qui empêche un test réussi, tandis que le sélecteur de données ci-dessous est correct, je ne suis actuellement pas en mesure de reproduire une règle de travail.

Le rapport de bogue est ici: https://www.drupal.org/node/2770291 - Pour résumer ce problème, Rules s'attend à ce que le paramètre TO: soit un tableau et génère une erreur lors du passage du jeton d'adresse e-mail ci-dessous qui renvoie un chaîne.

Ma réponse initiale est vraie pour Drupal 7, mais pour Drupal 8, la situation semble plus simple et repose sur un seul fait qui n'est pas encore bien documenté.

En D7, nous connaissons une syntaxe ressemblant à: comment:node:author:mail

En D8, le même sélecteur (qui fonctionne) est: comment.entity_id.entity.uid.entity.mail.value

J'espère que cela aide, je laisse la réponse précédente ci-dessous au cas où cela aiderait quelqu'un d'autre.

Réponse précédente

* En général, avec Rules pour utiliser la valeur d'un champ, la règle doit d'abord vérifier spécifiquement l'existence du champ (c'est-à-dire que le champ a une valeur dans le contexte où la règle est en cours d'exécution). Si vous n'avez pas déjà essayé cela, vous pouvez essayer d'ajouter une condition "Entité a un champ" à la règle pour vérifier l'existence de l'adresse e-mail. Cela devrait ensuite exposer le jeton pour le champ.

J'ai rencontré des problèmes similaires lors de l'exécution de règles à l'aide de relations d'entité (ce qui est plus ou moins ce que vous faites en référençant l'auteur à partir du nœud) pour vérifier l'existence du champ (dans votre cas, très probablement une vérification que l'entité a un auteur (cela devrait ouvrir l'accès à l'objet utilisateur) puis une vérification par rapport à l'objet utilisateur pour s'assurer qu'il a une adresse e-mail) a ouvert les jetons de champ disponibles à partir de l'entité référencée. *

HomoTechsual
la source
Je serais intéressé de voir une règle de travail incluse dans cette réponse qui fait en fait le sujet de cette question ... pour D8 . Pouvez-vous mettre à jour votre réponse pour inclure un tel exemple (en utilisant la version D8 la plus récente du module Rules ? PS: d'après le nombre de votes positifs de cette question, il semble que d'autres utilisateurs recherchent également quelque chose de similaire ...
Pierre. Vriens
Bien sûr et bonne idée, il me faudra un peu de temps pour faire tourner un nouveau site de test pour produire cela.
HomoTechsual
J'ai hâte de voir bientôt votre réponse mise à jour. Bien que la création d'un site approprié ne soit vraiment qu'à un clic ... utilisez https://simplytest.me/project/rules , acceptez la version (par défaut) de 8.x-3.0-alpha2 et cliquez sur le " sandbox de lancement " - bouton. Après cela, vous avez tout ce dont vous avez besoin pour construire "rapidement" la règle que vous avez en tête. Ensuite, exportez-le et copiez / collez cette exportation dans votre réponse ici. Ensuite, faites-moi savoir (commentaire supplémentaire?) Que votre règle est prête pour un contrôle qualité. Ce serait bien si vous pouviez l'afficher quelque part dans les prochains jours ... si vous le pouvez.
Pierre.Vriens
Salut @ Pierre.Vriens J'ai édité mon commentaire, après avoir joué avec les règles sur D8 un peu plus loin, cela s'avère moins complexe que je pensais et plus le résultat de changements de sélecteurs en D8.
HomoTechsual
De plus, je ne sais pas pourquoi j'oublie toujours SimplyTest.me
HomoTechsual
1

Il y a un exemple de travail dans la file d'attente des problèmes de règles qui a été publiée en novembre 2016, donc cela a été possible au moins depuis. Voir https://www.drupal.org/project/rules/issues/2828422

Voici une version légèrement modifiée de cette réponse. Vous pouvez l'importer dans votre site et le consulter dans l'interface utilisateur pour savoir comment configurer cette fonctionnalité.

langcode: en
status: true
dependencies: {  }
id: 'email_node_author_on_new_comment'
label: 'Email Node Author on New Comment - Issue 2828422'
events:
  -
    event_name: 'rules_entity_insert:comment'
description: 'Sends email to Node Author when a New Comment is added.'
tags:
  - node
  - email
  - comment
config_version: '3'
expression:
  id: rules_rule
  uuid: b5276280-d0f2-4f64-9512-06f077793c58
  conditions:
    id: rules_and
    uuid: ebf212fc-d858-417d-977d-af1be2cfd886
    conditions: {  }
  actions:
    id: rules_action_set
    uuid: 88a78280-2bca-4367-a4d3-8bbda9397c2a
    actions:
      -
        id: rules_action
        uuid: 5e6e5aed-b75f-412a-9670-48327eb58ba6
        context_values:
          to:
            - '{{ comment.entity_id.entity.uid.entity.mail }}'
          subject: 'Your content {{ comment.entity_id.entity.title }} has a new comment.'
          message: 'Your content {{ comment.entity_id.entity.title }} has a new comment.'
          reply: ''
          language: ''
        context_mapping: {  }
        context_processors:
          to:
            rules_tokens: {  }
          subject:
            rules_tokens: {  }
          message:
            rules_tokens: {  }
          reply:
            rules_tokens: {  }
          language:
            rules_tokens: {  }
        provides_mapping: {  }
        action_id: rules_send_email
anonyme
la source