在Drupal 6中以编程方式创建节点

时间:2010-03-30 20:35:01

标签: php drupal drupal-nodes

我一直在寻找如何在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。当我回滚数据库时(在我做出更改之前)错误消失了。任何帮助表示赞赏!

修改

稍微玩了一下后,我确实发现我的hook_menu()中的'访问参数'中有错误,但就重复条目而言,我无法弄明白。所以,如果你遇到同样的问题,祝你好运,如果你发现问题就在这里发帖! : - )

5 个答案:

答案 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的节点的条目。我不知道你的表是不同步的,或者你是在这个表中插入两行。

可能的原因:

  • 您有一些使用此表的自定义代码/其他模块吗?
  • 创建节点时,您在代码中触发nook_nodeapi op insert两次。

答案 4 :(得分:0)

好的变化是权限问题。

就我而言,我必须向用户角色提供“故事:创建新内容”权限。