Drupal - How to update a CCK NodeReference field programmatically?
我正在尝试创建一个节点(B型)
GApple是正确的,格式正确,但是您可能需要注意几件事。
增量值
首先,您需要知道附加到
GApple再次正确,您必须确切地说出在哪里添加新参考。当您获得该增量值时,您可以确切地说出将新引用附加到何处(增量1)。在这里是:
1 2 3 4 5 6 | function get_current_delta($node_vid){ return db_result(db_query("SELECT delta FROM {content_field_type_A_node_ref} WHERE vid = '%d' ORDER BY delta DESC LIMIT 1", $node_vid)); } |
添加新参考
我们有三角洲!因此我们可以将新的
1 2 3 4 5 6 7 8 |
保存更新的节点
(可选)调用
1 2 3 4 | // Resaving the updated node. $node_type_A = node_submit($node_type_A); node_save($node_type_A); content_insert($node_type_A); |
刷新内容缓存
可能最重要的部分是这几天让我丧命。 CCK在数据库中有一个名为
1 | db_query("DELETE FROM {cache_content} WHERE cid = '%s'", 'content:' . $node_type_A->nid . ':' . $node_type_A->vid); |
希望有帮助;)
我刚刚检查了自己的一个模块,该模块对对象格式做了类似的操作,并且
要检查的一件事是,当您加载节点时,CCK可能会使用空值预填充节点引用数组。如果将字段配置为仅允许一个值,则使用数组追加运算符(
很棒的帖子,但有一个更正:不要通过手动查询数据库来刷新缓存条目。如果有人使用内存缓存或任何其他外部缓存,它将失败。
cache_clear_all()是您清除的朋友。
建议的代码,直接从CCK模块获取:
1 | cache_clear_all('content:'. $node_type_A->nid .':'. $node_type_A->vid, content_cache_tablename()); |
"刷新内容缓存"这对我有用,尤其是当您从node_load()获取数据时。
我将CCK存储的节点引用显示为