如何创建一个Drupal规则来检查(在cron上)一个日期字段,如果将set field“status”传递给“ends”?

时间:2013-05-05 20:25:54

标签: drupal-7 drupal-rules

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

这是我在尝试创建此规则时获得的目标:

  1. React on event设为Cron maintenance tasks are performed
  2. Add Condition>将Select the condition to add设为Data comparison>继续
  3. 以下是问题:Data selectors只有site且无法访问字段数据。

    我在这里出错的任何想法?

3 个答案:

答案 0 :(得分:0)

您需要先创建规则组件:

  1. 转到规则>组件(admin / config / workflow / rules / components)
  2. 然后创建一个新组件,并从选择列表
  3. 中选择'规则'
  4. 设置此组件的名称,并在下表中选择:
    1. 数据类型:文字令牌
    2. 标签:您想要的名称
    3. 机器名称:使用相同的标签名称,但此处仅设置小写和下划线
    4. 用法:参数
  5. 在组件中添加条件“数据比较”,然后选择节点:类型
  6. 添加您想要的其他条件
  7. 设置所需的操作并保存
  8. 现在转到规则(admin / config / workflow / rules)并创建有关cron维护操作的规则(正如您已经完成的那样)
  9. 跳转条件部分和操作:
    1. 新动作:添加变量
    2. 价值:文字
    3. 然后写下此变量的值,就像您要循环的内容类型的机器名一样(如果您希望可以在下面的部分中更改此变量的名称和机器名称)。
  10. 现在添加另一个操作'按属性获取实体'
    1. 实体类型值:节点
    2. 属性值:类型
    3. 数据选择器:在第8点
    4. 创建的变量
  11. 现在在参数列表中添加循环使用提供的变量'按属性获取实体'
  12. 在循环中添加一个动作(单击循环行右侧的链接)并选择在第2点创建的组件并传递循环提供的变量
  13. 我说:我不知道它是否有效,但至少它应该引导你走向正确的道路

    对不起我的英语,我希望你能理解一切:)

答案 1 :(得分:0)

规则条件" Cron维护任务的问题被执行"就是那时,无法访问节点对象,因此无法对节点进行任何检查/操作。作为解决方案,使用事件=节点:查看内容,而不是事件=执行Cron维护任务。您可以将其保留为任何内容类型,以便当有人访问网站并打开至少一个页面时,将触发某些操作。

答案 2 :(得分:0)

是的,您应该可以使用Rules模块来实现您的工作,但我建议您将其与Views Rules模块结合使用。关于这个模块的一些细节(来自其项目页面):

  

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

之前的引用可能看起来有些神秘(它可能会让你觉得“所以什么,这对我有什么帮助?”)。有关如何使用这些模块继续前进的更多细节:

  1. 创建一个视图(使用Views),以便您有1个视图结果(行),其中包含您要处理的所有节点(与您的自定义内容类型相关,如果可能,使用您的日期字段以某种方式过滤) 。而该视图具有后续步骤中所需的任何字段(列),例如节点ID,日期字段以及可能的其他字段。稍后您需要将这些视图字段作为规则要处理的值,“将列表小部件从active设置为ended *”(如您的问题所示)。重要提示:使用视图显示类型“规则”。
  2. 删除“添加条件”(在您启动的自定义规则中),然后使用Views Rules模块迭代这些视图中的每一个导致规则操作,使用称为“规则循环“。
  3. 对于规则循环中的每个迭代步骤,执行“做你的事情”的规则操作(=将列表小部件从active设置为ended)。此时,您将视图结果的每一列中的所有数据都可用作所谓的规则参数。所以在这一点上,为你在该循环中处理的节点调整该列表小部件的值是一件小事。
  4. 您可以选择添加任何额外的规则条件,也可以根据自己的想象添加。通常情况下,您不能或尚未将其表示为“视图”过滤器。但是,如果您可以选择使用视图过滤器和额外的规则条件,我建议您使用视图过滤器,因为这会减少规则循环中的迭代次数(性能!)。
  5. 简单,没有?