新しい電子メールアドレスを受信者として、作成したWebフォームのコピーを作成しようとしています。
Node_loadでノードをロードした後、node_saveでノードを保存できますか?新しいタイムスタンプとIDを持つ新しいノードが作成されますか?
作成された新しいノードのNIDを取得するにはどうすればよいですか?
unset($node->nid)
を使用してノードIDを設定解除するだけで、 node_save() が新しいノードを作成します。
node_save()
から実行されるコードは次のとおりです。
_// Insert a new node.
$node->is_new = empty($node->nid);
// ...
if ($node->is_new) {
_node_save_revision($node, $user->uid);
drupal_write_record('node', $node);
db_query('UPDATE {node_revisions} SET nid = %d WHERE vid = %d', $node->nid, $node->vid);
$op = 'insert';
}
_
drupal_write_record() の最後の引数は渡されません。つまり、関数は既存のデータベース行を更新しません。
ノードオブジェクトがnode_save()
で保存されると、_$node->nid
_には、新しく作成されたデータベース行のノードIDが含まれます。
コメントを投稿する前にシステムが50の評判ポイントを取得するため、これを回答として投稿する必要がありました。
とにかく、@ koivoと彼の答えに応じて。それを追加したかっただけで、$node->vid
トリックを行いました。したがって、設定を解除して保存するための私のコードは
// Load a node
$node = node_load(1);
// unset version and node id's
unset($node->nid);
unset($node->vid);
unset($node->path);
// Save the copy
node_save($node);
複製モジュール を試してください。
最近行ったサイトで物事を簡単に複製して変更する必要があり、このモジュールがうまく機能していることがわかりました。
replicate.api.php ファイルをチェックして、使いやすさを確認してください。
D7では、ノードID unset($node->nid)
とリビジョンID unset($node->vid)
の両方の設定を解除する必要があります。特定の用語参照が1つある特定のタイプ(製品)のノードを複製するフォームを作成します(その用語IDを置き換えます)。これが最終的な送信です。
function MYMODULE_form_submit($form, &$form_state) {
$old_tid = $form_state['values']['old_tid'];
$new_tid = $form_state['values']['new_tid'];
$query = new EntityFieldQuery();
$result = $query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'product')
->fieldCondition('field_some_term_reference', 'tid', $old_tid)
->execute();
foreach ($result['node'] as $product) {
$node = node_load($product->nid);
$node->field_some_term_reference[LANGUAGE_NONE][0]['tid'] = $new_tid;
unset($node->nid);
unset($node->vid);
node_save($node);
}
}
タイムスタンプと$node->uid
も再保存することを検討してください。