在Drupal 7

时间:2015-06-22 10:45:09

标签: drupal-7 rules 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是规则函数传递的节点作为参数。

这是一个好主意/最佳方法吗?任何想法或解决方法都会很棒。

1 个答案:

答案 0 :(得分:1)

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

  1. 创建规则组件(类型" 条件设置(AND)")而不是执行此检查的规则。
  2. 在您的规则组件(类型为Node)中使用参数,这样您就可以使用$ node了。
  3. 使用php进行检查。使用$ node从文件字段中获取文件数据。
  4. 创建一个普通规则(例如,使用事件保存内容之前),您将使用此组件作为条件。
  5. 正如你所说,你需要检查不是空值的差异,对吧?因此,您需要查看是否存在不同的fid (通常在存在不同文件时会发生更改),而不是使用isset。其他方法可用,如果您想查看哪些数据可以更改,请使用devel模块对文件字段执行dpm()

    为了获得文件字段的未更改值,请在主规则上使用相同的组件,但使用$ unchanged节点作为参数。