6

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

这是我尝试创建此规则时所取得的进展:

  1. 设置React on eventCron maintenance tasks are performed
  2. Add Condition> 设置Select the condition to addData comparison> 继续

问题是:Data selectors只能site访问和不能访问字段数据。

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

4

3 回答 3

0

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

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

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

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

于 2013-05-28T09:00:51.463 回答
0

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

于 2015-02-26T21:59:57.573 回答
0

是的,您应该能够使用“规则”模块来实现您正在寻找的内容,但我建议您也将其与“视图规则”模块结合使用。关于这个模块的一些细节(来自它的项目页面):

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

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

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

容易,不是吗?

于 2017-04-10T10:30:36.293 回答