我一直在寻找如何在Drupal 6中创建节点。我在stackoverflow上找到了一些条目,但问题似乎是旧版本或解决方案对我不起作用。好的,所以这是我目前尝试创建的过程
$node = new stdClass();
$node->title = "test title";
$node->body = "test body";
$node->type= "story";
$node->created = time();
$node->changed = $node->created;
$node->status = 1;
$node->promote = 1;
$node->sticky = 0;
$node->format = 1;
$node->uid = 1;
node_save( $node );
当我执行此代码时,会创建节点,但是当我收到管理页面时,会抛出以下错误:
警告:在第258行的C:\ wamp \ www \ steelylib \ includes \ menu.inc中为foreach()提供的参数无效。
警告:在第258行的C:\ wamp \ www \ steelylib \ includes \ menu.inc中为foreach()提供的参数无效。
用户警告:密钥1查询的重复条目“36”:INSERT INTO node_comment_statistics(nid,last_comment_timestamp,last_comment_name,last_comment_uid,comment_count)C:\ wamp \ www \中的值(36,1269980590,NULL,1,0)第409行的steelylib \ sites \ all \ modules \ nodecomment \ nodecomment.module。
警告:在第258行的C:\ wamp \ www \ steelylib \ includes \ menu.inc中为foreach()提供的参数无效。
警告:在第258行的C:\ wamp \ www \ steelylib \ includes \ menu.inc中为foreach()提供的参数无效。
我看过不同的教程,似乎都遵循相同的过程。我不确定我做错了什么。我正在使用Drupal 6.15。当我回滚数据库时(在我做出更改之前)错误消失了。任何帮助表示赞赏!
答案 0 :(得分:3)
我认为问题源于其他地方。上面的代码段是100%正确的。但我相信你在某处犯了错误。
我在menu.inc的第258行遇到过警告。警告的起源是错误的菜单条目。检查模块中的所有 hook_menu
一个常见的错误 - 比如我的 - 正在为这些菜单条目分配错误的值:'access callback'
,'access arguments'
,'page callback'
,'page arguments'
记住这些项目:
'access arguments'
和'page arguments'
必须是数组。'access callback' => true
关于Duplicate条目,我仍然不知道。
答案 1 :(得分:3)
我在Drupal 6中以编程方式创建节点所做的是;
$node = new stdClass();
$node->name = "test title";
$node->title = $node->name;
$node->body = "test body";
$node->type = "story";
$node->created = time();
$node->changed = $node->created;
$node->status = 1;
$node->promote = 1;
$node->sticky = 0;
$node->format = 1;
$node->uid = 1;
if ($node = node_submit($node)) {
node_save($node);
}
else {
// Process error
}
答案 2 :(得分:1)
您需要清除节点,节点修订和节点注释统计信息表。
问题是它是否尝试插入已存在于节点注释统计信息中的记录。
答案 3 :(得分:0)
我不确定您的网站到底发生了什么,需要检查您的数据库和其他内容,但您看到的错误是由此行引起的:
db_query('INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) VALUES (%d, %d, NULL, %d, %d)', $node->nid, $node->created, $node->uid, 0);
保存节点并且一切正常时,它会被激活。这是将某些东西插入该表的地方。但不知何故,您已经在node_comment_statistics表中有一个带有nid 36的节点的条目。我不知道你的表是不同步的,或者你是在这个表中插入两行。
可能的原因:
答案 4 :(得分:0)
好的变化是权限问题。
就我而言,我必须向用户角色提供“故事:创建新内容”权限。