2013-03-18 18 views
1

所以我有这个字段名为field_movie_cast_count这是一个名为movie的内容的字段,所以我想要的是每当电影更新时(如我添加另一个演员)field_movie_cast_count字段也会更新。我已经成功地使用这个代码:是否有可能通过使用nodeapi将某个字段设置为某个值nodeapi

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?我试过这个代码它不工作。大声笑

或应该重述问题是否有任何其他方式显示计数铸造?除了我的方式吗?因为也许我不理解我的老板吧。

+2

_“现在,我的老板告诉我,我应该不使用查询“_听起来像你的老板确切地知道他想要什么,你问他如何去做? – Clive 2013-03-18 15:03:58

+0

nope。他是严格的老板。所以每次他想要做点什么时,我都会点头。但是有可能吗?他也是一名Web开发人员,所以我知道他知道他想要什么。 – 2013-03-18 15:06:51

+0

对不起,认为db_update会做的伎俩,但我无法在D6中找到它。我确定它在那里...也许在一些贡献模块:(这里是一个链接到D6抽象层api:http://api.drupal.org/api/drupal/includes!database.inc/group/database/6 – span 2013-03-18 15:13:08

回答

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); 
    } 
} 
+1

你是先生,是个天才!我知道我的问题是关键,但我无法弄清楚什么时候意味着什么,或者它做了什么,你给我澄清了。非常感谢!我希望你赢得彩票或其他什么 – 2013-03-18 15:51:05

相关问题