How to use Drupal rules to adapt content access permissions for nodes that are older than 1 week?

时间:2015-06-26 10:05:58

标签: drupal drupal-7 drupal-rules

I have a special content type named "example". I want to show new nodes of this type to anonymous users of my site.

What I need: after 1 week the node was created, content access permissions (Content Access module is installed) are changed that only users with particular role are able to see this node.

Should this be triggered on cron or what? Or just how to do something to nodes that are older than 1 week?

Could you provide some instructions on how to do that? Because I'm new to the Rules module and have no any ideas.

2 个答案:

答案 0 :(得分:0)

您应该可以使用规则执行此操作(请参阅this question,不完全是您想要的但是关闭),但我会选择一个实现hook_cron的小型自定义模块,您可以在其中获取所有内容创建日期< (现在 - 1周),并修改每个权限。

它应该比我的第一个链接中解释的规则方法更有效,在第一个链接中,您需要遍历每个cron执行上的所有节点。规则可能比编写纯PHP更烦人。我更喜欢学习Drupal API而不是花费数小时点击规则界面(规则很棒,但很难)。

祝你好运

答案 1 :(得分:0)

是的,您应该可以使用Rules模块来实现您的目标,但我建议您将其与Rules Once per Day和{{3模块,如下面进一步说明的那样。

第1步:规则事件

你的问题并没有真正指明任何可以/应该被用作规则事件的东西(对于要触发的规则。即使它像“取决于你自己的想象”(任何规则事件都会做),某事这肯定会使用Views Rules模块。以下是它的工作原理(根据Rules Once per Day,来自模块所有者):

  • 您在此模块的管理设置页面上指定触发时间
  • 当cron任务在该小时开始后首次运行时,规则触发器将运行。实际运行时间取决于您的cron任务时间。

所以这是了解/阅读本文的另一种方式:

  • 只有在运行cron作业时才会触发“事件”。
  • 该事件只会被触发1次/天,即“下次cron在触发时间过后运行”。

第2步:规则操作(和可选事件)

有关comment in issue 2495775模块的详细信息(来自其项目页面):

  

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

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

  1. 创建一个视图(使用Views Rules),以便您有1个视图结果(行),其中包含您想要处理的所有节点(至少1周),而该视图包含字段(列)对于后续步骤中需要的任何内容,例如节点ID,但也可能是其他字段。稍后您将需要这些视图字段作为您的规则要处理的值,“更改内容访问权限(使用Views模块),以便只有具有特定角色的用户才能看到此类节点“(类似于你在问题中提到的)。重要提示:使用视图显示类型“规则”。
  2. 使用称为“规则循环”的规则技术,创建一个自定义规则,在该规则中使用content_access模块迭代每个视图导致规则操作。
  3. 对于规则循环中的每个迭代步骤,执行规则操作以“做你的事情”(=更改内容访问权限)。此时,您将视图结果的每一列中的所有数据都可用作所谓的规则参数。所以在这一点上,调整你在该循环中处理的节点的内容访问权限是一件小事。
  4. 或者,您可能还想添加任何额外的规则条件,也可以根据自己的想象添加。
  5. 简单,没有?