【问题标题】:How to create a Drupal rule to check (on cron) a date field and if passed set field "status" to "ended"?如何创建 Drupal 规则来检查(在 cron 上)日期字段以及是否将设置字段“状态”传递给“结束”?
【发布时间】:2013-05-05 20:25:54
【问题描述】:

我正在尝试创建一个自定义规则(使用 Rules 模块),以便每次运行 cron 时,此规则都会检查我创建的自定义内容类型中的日期字段。如果该日期已过,那么我想将列表小部件从active 设置为ended

这是我尝试创建此规则时的结果:

  1. React on event 设置为Cron maintenance tasks are performed
  2. Add Condition > 将 Select the condition to add 设置为 Data comparison > 继续

这是问题所在:Data selectors 只有site 并且无法访问字段数据。

有什么想法我在这里出错了吗?

【问题讨论】:

    标签: drupal-7 drupal-rules


    【解决方案1】:

    规则条件“执行 Cron 维护任务”的问题在于,此时无法访问节点对象,因此无法对节点进行任何检查/操作。作为解决方案,请使用 Event = Node: Content is 查看,而不是 Event = Cron 维护任务被执行。您可以将其对任何内容类型保持打开状态,以便当有人访问该网站并打开至少一个页面时,将触发一些操作。

    【讨论】:

      【解决方案2】:

      你需要先创建一个规则组件:

      1. 转到规则>组件(管理员/配置/工作流/规则/组件)
      2. 然后创建一个新组件并从选择列表中选择'Rule'
      3. 为此组件设置名称并在下表中选择:
        1. 数据类型:文本标记
        2. 标签:你想要的名字
        3. 机器名称:使用与标签相同的名称,但此处仅设置小写和下划线
        4. 用法:参数
      4. 在组件中添加条件“数据比较”并选择node:type
      5. 添加您想要的其他条件
      6. 设置您想要的操作并保存
      7. 现在转到 Rules (admin/config/workflow/rules) 并创建具有 cron 维护操作的规则(正如您已经完成的那样)
      8. 跳转条件部分和动作:
        1. 新操作:添加变量
        2. 值:文本
        3. 然后将这个变量的值写成你想要循环的内容类型的机器名(如果你愿意,你可以在下面的部分中更改这个变量的名称和机器名)
      9. 现在添加另一个操作'Fetch entity by property'
        1. 实体类型值:节点
        2. 属性值:类型
        3. 数据选择器:在第 8 点创建的变量
      10. 现在在参数列表中添加一个循环,使用'Fetch entity by property'提供的变量
      11. 在循环中添加一个动作(点击循环行右侧的链接)并选择第2点创建的组件并传递循环提供的变量

      我声明:我不知道它是否有效,但至少它应该引导你走向正确的道路

      对不起我的英语,我希望你明白一切:)

      【讨论】:

        【解决方案3】:

        是的,您应该能够使用Rules 模块来实现您正在寻找的东西,但我建议您也将它与Views Rules 模块结合使用。关于这个模块的一些细节(来自它的项目页面):

        将视图直接作为规则操作和循环提供,以无缝使用视图结果数据。

        前面的引用可能看起来有点神秘(它可能会让你想“那又如何,这对我有什么帮助?”)。因此,有关如何使用这些模块继续前进的更多详细信息:

        1. 创建一个视图(使用Views),以便您拥有 1 个视图结果(行),其中包含您要处理的所有节点(与您的自定义内容类型相关,如果可能的话,使用您的日期字段进行过滤)。而该视图具有后续步骤中所需的任何字段(列),例如节点 ID、日期字段以及可能的其他字段。稍后您将需要这些 View 字段作为您的规则处理的值,“将列表小部件从active 设置为ended*”(如您的问题所示)。重要提示:使用“规则”的视图显示类型。
        2. 删除“添加条件”(在您启动的自定义规则中),而是使用 Views Rules 模块迭代这些视图中的每一个,从而生成规则操作,使用称为“规则循环”的规则技术”。
        3. 对于规则循环中的每个迭代步骤,执行规则操作以“做你的事”(= 将列表小部件从 active 设置为 ended)。那时,您将获得来自视图结果每一列的所有数据,即所谓的规则参数。因此,此时为您在该循环中处理的节点调整该列表小部件的值是小菜一碟。
        4. (可选)您可能还想添加任何额外的规则条件,这也取决于您自己的想象。通常,您不能或尚未将其表示为视图过滤器。但是,如果您可以在使用视图过滤器和额外的规则条件之间进行选择,我建议您使用视图过滤器,因为这将减少您在规则循环中的迭代次数(性能!)。

        简单,不是吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-09
          • 2011-03-20
          • 2018-07-24
          • 2013-09-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多