如何使用当天发布的所有节点的规则在一天结束时发送电子邮件通知?

How to send an Email notification by day end using Rules with all the nodes published that day?

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

同样,我尝试了一些使用 Rules 的方法,但介于两者之间。

有什么帮助吗?

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

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

Wrong date format. Specify the date in the format 2017-05-10 08:17:18.

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

现在我正在尝试使用 Views Rules which is suggested in this answer to the question about 'How to create a Drupal rule to check (on cron) a date field and if passed set field "status" to "ended"?' 的另一种方法来实现它。

这就是我要实现的方法:

  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 作业在每天结束时调用该终点。

下面是我如何让它工作的蓝图...

第 1 步:为已发布的每个节点创建一个电子邮件

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

  • 使用Rules to create a rule with a Rules Action that consists of a "Rules Loop", in which its "list items" are actually the list of nodes that you want to be included in your eMail later on. To create this Rules Loop, use the Views Rules combined with a Views display type of "Views Rules", for the view that you created. Refer to my answer to "How to pass arguments to a view from Rules?" for way more details on how to use the Views Rules模块。

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

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

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

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

  1. 添加一些新的规则变量,稍后将在循环开始之前用作电子邮件正文的一部分。假设您将变量命名为 nodes_list_var_for_email_body.
  2. 在您的循环中,对于每次迭代,将每个 "list item" 的值添加或附加到该变量 nodes_list_var_for_email_body
  3. 移动规则操作以在循环外并在循环完成后发送电子邮件。并微调您的(新)"send an eMail" 规则操作的详细信息(配置)。这样做时,您将能够 select nodes_list_var_for_email_body 的令牌包含在您的电子邮件正文中的任何位置。

第 3 步:安排规则的每日执行

使用 Rules Once per Day to schedule the daily execution of your rule. Refer to my answer to "How to limit the execution of a rule for sending an email to only run once in a day?" 获取有关此模块的更多详细信息。

好了,就这样了...