我有一套不同的规则,可以检查在更新现有内容后是否更新了各种字段类型。问题是每个工作正常,除了唯一不起作用的文件字段类型。使用的条件是字段上的“非数据比较”,检查“节点未更改”版本与新“节点”版本。这适用于所有其他类型的字段和操作(我至少使用过),而不是文件字段类型;无论文件字段是否发生变化,规则都会触发。
我还发现这篇文章有一个非常类似的问题:https://www.drupal.org/node/1011014#comment-10040082
我认为我有一个解决方法的问题,但我只想先与其他开发人员一起检查,因为我的PHP并不是最好的。
如果我要启用PHP模块,那么在规则中添加条件,检查'source'属性以查看是否添加了新文件......这会有效吗?我的代码是:
if (isset($object->field_FILEFIELD_NAME[0]['source'])) { //Check for new files }
我相信$ object是规则函数传递的节点作为参数。
这是一个好主意/最佳方法吗?任何想法或解决方法都会很棒。
答案 0 :(得分:1)
是的,您可以使用PHP 进行文件字段检查,因为它更清晰(但总是不太安全)。以下是我的建议:
正如你所说,你需要检查不是空值的差异,对吧?因此,您需要查看是否存在不同的fid (通常在存在不同文件时会发生更改),而不是使用isset
。其他方法可用,如果您想查看哪些数据可以更改,请使用devel模块对文件字段执行dpm()
。
为了获得文件字段的未更改值,请在主规则上使用相同的组件,但使用$ unchanged节点作为参数。