开发者社区> 问答> 正文

Drupal中hook_nodeapi的update:报错

最近,需要在节点创建的时候需要在一个分类里同时创建和该节点标题相同的分类项,这时,就要用hook_nodeapi,在创建节点的时候用节点标题创建一个分类,在更新的时候更新分类的name。

按照一般思路,创建的时候用case 'insert';向tarm_data和term_hierarchy插入相应记录,添加分类。但是在编辑节点,更新的时候,使用case 'update'的,update是在节点刚被更新到了数据库中,也就是说在运行我们的代码的时候节点已经更新完了,那么如何才能把和我们之前节点标题相 同的分类与节点编辑同步更新呢?我的想法是能不能在update之前,把我们更新之前的标题存到一个变量, 然后在case 'update'的时候当做SQL语句的查询条件,用以达到同步更新的目的。但是经过一些尝试,发现做不到,但是却发现了另外一个很神奇的地方,解决了这 个问题。

case 'update':
$node_old = node_load($node->nid);
                        if($node_old->title != $node->title){
                            db_query("UPDATE {term_data} SET name = '%s' WHERE name = '%s'",$node->title,$node_old->title);
                        }
                        $tid = db_result(db_query("SELECT tid FROM {term_data} WHERE name = '%s'",$node->title));
                        foreach($node_old->taxonomy AS $key=>$value){
                            if($node->taxonomy[ARTICLE_VID]){
                                if($key != $node->taxonomy[ARTICLE_VID]){
                                    db_query("UPDATE {term_hierarchy} SET parent = %d WHERE tid = %d",$node->taxonomy[ARTICLE_VID],$tid);
                                }
                            }
                            else{
                                db_query("UPDATE {term_hierarchy} SET parent = %d WHERE tid = %d",,$tid);
                            }
                        }
                        if(!$node_old->taxonomy){
                            db_query("UPDATE {term_hierarchy} SET parent = %d WHERE tid = %d",$node->taxonomy[ARTICLE_VID],$tid);
                        }

                    break;

在case 'update'的时候,用一个变量$node_old = node_load($node->nid);按理来说$node_old变量应该就是我们已经更新的节点,但是把这个变量打印出来,却是更新之前 的内容,这样,再用if判断更新前后标题是否更改,在运行sql语句更新term_data表里与更新之前标题相同的分类的name,同步更新的目的就达 到了。但是这个方法感觉是个取巧的方法,'update'在官网API上说的也很清楚,是已经更新到数据库中了,才会运行我们的代码,但是这样却取到了更 新之前的节点内容,这样会取到更新之前的节点的原因,还不清楚,有待研究。

展开
收起
kun坤 2020-06-06 11:53:05 307 0
1 条回答
写回答
取消 提交回答
  • 继续研究!我是没看明白代码######国内玩Drupal 的还不少哈……######国内drupal越来越火了~

    2020-06-06 11:53:11
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载