1

所以我把这个字段命名为field_movie_cast_count这是一个名为内容的字段,movie所以我想要的是每当电影更新时(比如我添加另一个演员),该field_movie_cast_count字段也会更新。我已经使用以下代码成功完成了它:

function count_cast_nodeapi(&$node, $op) {
    $id = $node->nid;
    if($op == 'update' && $node->type == 'movie')  {
        $count=count($node->field_movie_cast);
        $q = db_query("update content_type_movie set field_movie_cast_count_value = '$count' WHERE nid = '$id'");
    }
}

现在,我的老板告诉我,我不应该使用查询。那么,如何通过不使用数据库查询来实现这一点?

不能只设置 field_movie_cast_count[]['value']=$count 吗?我试过这段代码它不起作用。哈哈

或者我应该重新提出问题是否有任何其他方式来显示计数演员?除了我的方式?因为也许我不明白我的老板是对的。

4

1 回答 1

2

hook_nodeapi()有一个presave在节点(和字段数据)提交到数据库之前调用的操作。操作的定义是:

节点通过验证,即将保存。模块可以使用它在节点保存到数据库之前对其进行更改。

您可以使用它来更新字段值,而无需手动访问数据库(无论如何都会被覆盖),如下所示:

function MYMODULE_nodeapi(&$node, $op) {
  if ($op == 'presave' && $node->type == 'movie') {
    $node->field_movie_cast_count[0]['value'] = count($node->field_movie_cast);
  }
}
于 2013-03-18T15:32:26.250 回答