Drupal 7 中文件字段'when field has changed'触发规则



我有一组不同的规则,用于检查"在更新现有内容后"是否更新了各种字段类型。问题是,除了唯一一个不起作用的文件字段类型外,每一个都能很好地工作。所使用的条件是字段上的"NOT Data comparison"(非数据比较),检查"node unchanged"版本与新的"node"版本。这适用于所有其他类型的字段和操作(我至少使用过),只是不适用于filefield类型;不管文件字段上是否有更改,规则都会触发。

我还发现了一个非常相似的问题:https://www.drupal.org/node/1011014#comment-10040082

我想我已经具备了解决方法,但我只是想先和一些开发人员核实一下,因为我的PHP不是最好的。

如果我要启用PHP模块,那么在规则中添加一个条件,检查"source"属性以查看是否添加了新文件。。。这行得通吗?我的代码是:

if (isset($object->field_FILEFIELD_NAME[0]['source'])) { //Check for new files }

我相信$object是规则函数作为参数传递的节点。

这是个好主意/最好的方法吗?任何想法或变通办法都会很棒。

是的,您可以使用PHP进行文件字段检查,因为它更清晰(但总是不那么安全)。以下是我的建议:

  1. 创建规则组件(类型为"条件集(AND)"),而不是执行此检查的规则
  2. 在规则组件(类型为Node)中使用参数,这样就有了可用的$Node
  3. 使用php进行检查。使用$node从filefield获取文件数据
  4. 创建一个正常规则(例如,在保存内容之前使用事件),在其中您将使用此组件作为条件

正如您所说,您需要检查差异,而不是空值,对吧?因此,您不需要使用isset,而是需要查看是否存在不同的fid(当存在不同的文件时,通常会发生变化)。其他方法也可用,如果您想查看哪些数据可以更改,请使用devel模块对filefield执行dpm()

为了使filefield的值保持不变,请在主Rule上使用相同的组件,但使用$unchanged节点作为参数。

相关内容

最新更新