如何使用当天发布的所有节点的规则在截止日期前发送电子邮件通知?

时间:2017-05-09 09:12:49

标签: drupal-7 drupal-rules

我正在尝试实现电子邮件通知。条件是,它应该在当天结束时发布当前发布的内容列表。

对于同样的事情,我使用Rules尝试了几件事情,但却介于两者之间。

任何帮助?

我尝试使用规则,我创建了一个如下规则:

  • 活动:

    1. 更新现有类型(内容类型名称)
    2. 的内容后
    3. 执行Cron维护任务
  • 条件:要比较的数据:[node:field-img-status],数据值:Approve

当我尝试添加第二个条件来检查节点是否在24小时内发布时,我无法实现它。当我添加strtotime("-1 day")时,我收到如下错误:

  

错误的日期格式。以2017-05-10 08:17:18格式指定日期。

我试过date('Y-m-d h:i:s',strtotime("-1 day"))但我没有成功。

现在我正在尝试使用Views Rules的另一种方法来实现它,this answerHow to create a Drupal rule to check (on cron) a date field and if passed set field "status" to "ended"?中提出了关于' Source'

的问题。

2 个答案:

答案 0 :(得分:0)

这就是我实现这个目标的方法:

  1. 制作一些视图,列出今天创建的所有节点。

  2. 制作一些终点(来自我的模块,请查看:https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7.x) 它将调用此视图,并获取该节点列表(即使用views_get_view_result:https://api.drupal.org/api/views/views.module/function/views_get_view_result/7.x-3.x),遍历列表,撰写电子邮件并发送。

  3. 然后我会设置cron job来在每天结束时调用该终点。

答案 1 :(得分:0)

以下是我如何使其发挥作用的蓝图......

步骤1:为已发布的每个节点创建一个eMail

  • 创建过去24小时内发布的所有节点的视图(使用Views)。确保在该视图中包含一个列,以便稍后在电子邮件中为每个节点包含各种数据。

  • 使用Rules创建规则,其中包含“规则循环”的规则操作,其中“列表项”实际上是您希望稍后包含在电子邮件中的节点列表。要创建此规则循环,请对您创建的视图使用Views Rules结合视图显示类型“视图规则”。有关如何使用my answer模块的详细信息,请参阅How to pass arguments to a view from Rules?至“Views Rules”。

  • 对于上一步的规则循环中的每个列表项,您可以访问您创建的视图中每列的所有数据。通过使用这些数据,您可以添加其他规则操作(在同一规则循环内),以发送有关正在处理的节点的相应电子邮件。

步骤2:将所有电子邮件分组到一个电子邮件

显然,上一步为过去24小时内发布的每个节点创建了一个eMail。如果您只有几个节点可能不是一个真正需要担心的问题。但是,如果你有几十个(或更多?)这样的节点,那么你可能想考虑在一个eMail中整合所有这些电子邮件,其中包含(在其eMail主体中)完整的节点列表。

实现此类合并的可能解决方案类似于我对“How to concatenate all token values of a list in a single field within a Rules loop?”的回答中包含的规则示例中显示的内容。在你的情况下,你可以让它像这样工作:

  1. 添加一些新的Rules变量,稍后将在循环开始之前将其用作eMail正文的一部分。假设您将变量命名为nodes_list_var_for_email_body
  2. 在循环中,对于每次迭代,将每个“列表项”的值前置或附加到该变量nodes_list_var_for_email_body
  3. 移动规则操作以在循环外发送电子邮件,并在循环完成后发送。并微调(新)“发送电子邮件”规则操作的详细信息(配置)。执行此操作时,您将能够选择nodes_list_var_for_email_body的令牌以包含在您的电子邮件正文中的任何位置。
  4. 第3步:安排日常执行规则

    使用Rules Once per Day安排日常执行规则。有关此模块的更多详细信息,请参阅my answer至“How to limit the execution of a rule for sending an email to only run once in a day?”。

    Voilà,就是这样......