3

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 \ include \ menu.incのforeach()に無効な引数が指定されました。

警告:258行目のC:\ wamp \ www \ steelylib \ include \ menu.incのforeach()に無効な引数が指定されました。

ユーザー警告:キー1クエリのエントリ「36」が重複しています:INSERT INTO node_comment_statistics(nid、last_comment_timestamp、last_comment_name、last_comment_uid、comment_count)VALUES(36、1269980590、NULL、1、0)in C:\ wamp \ www \ steelylib \ sites 409行目の\all\ modules \ nodecomment\nodecomment.module。

警告:258行目のC:\ wamp \ www \ steelylib \ include \ menu.incのforeach()に無効な引数が指定されました。

警告:258行目のC:\ wamp \ www \ steelylib \ include \ menu.incのforeach()に無効な引数が指定されました。

私はさまざまなチュートリアルを見てきましたが、すべて同じプロセスに従っているようです。何が間違っているのかわかりません。Drupal6.15を使用しています。データベースを(変更を加える直前に)ロールバックすると、エラーはなくなります。

編集
少し遊んだ後、hook_menu()の「アクセス引数」にエラーがあることに気付きましたが、重複するエントリに関する限り、それを理解することはできませんでした。

4

5 に答える 5

3

問題はどこかから生じていると思います。上記のコードスニペットは100%正しいです。しかし、あなたはどこかで間違いを犯していると確信しています。

menu.incの258行目で警告が発生しました。警告の原因は間違ったメニューエントリでした。モジュール内のすべてのhook_menuを確認してください。
私のようなよくある間違いの1つは、これらのメニューエントリに間違った値を割り当てることです:'access callback'、、、'access arguments''page callback''page arguments'

次の点に注意してください。

  • 'access arguments'配列で'page arguments'ある必要があります。
  • メニューエントリへの無制限のアクセスを許可する場合は、次のようにします。'access callback' => true

重複エントリに関しては、まだわかりません。

于 2010-03-31T08:54:35.587 に答える
3

Drupal6でプログラム的にノードを作成するために私が行ったことは次のとおりです。

$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
}
于 2010-08-04T14:36:42.243 に答える
1

ノード、ノードリビジョン、およびノー​​ドコメント統計テーブルを消去する必要があります。

問題は、ノードのコメント統計にすでに存在するレコードを挿入しようとしていることです。

于 2010-03-30T23:20:23.453 に答える
0

あなたのサイトで何が起こっているのか正確にはわかりません。あなたのdbや他のものをチェックする必要がありますが、あなたが見ているエラーはこの行が原因です:

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テーブルにnid36のノードのエントリがすでにあります。テーブルが同期していないのか、このテーブルに2つの行を挿入しているのかわかりません。

考えられる理由:

  • このテーブルを使用するカスタムコード/他のモジュールがありますか?
  • ノードの作成時に、コードでnook_nodeapiop挿入を2回トリガーしています。
于 2010-03-31T13:46:40.653 に答える
0

良い変更は、これは権限の問題です。

私の場合、ユーザーロールに「ストーリー:新しいコンテンツの作成」権限を付与する必要がありました。

于 2014-09-15T10:15:24.137 に答える