답변:
그냥 노드와 ID 설정을 해제 unset($node->nid)
하고, 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가 포함되어 있습니다.
$node->nid
. 해당 노드 ID가로드 된 노드의 ID가 아닌 경우 저장된 노드의 ID로 변경해야하는 경우 해당 노드 ID를 그대로 둘 수 있습니다.
unset($node->path);
의견을 작성하기 전에 시스템에서 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);
D7에서는 노드 ID unset($node->nid)
와 개정 ID를 unset($node->vid)
모두 설정 해제해야합니다 . 하나의 특정 용어 참조가있는 하나의 특정 유형 (제품)의 노드를 복제하는 양식을 작성합니다 (해당 용어 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
.
복제 모듈을 사용해보십시오 .
최근에 한 사이트에서 쉽게 복제하고 변경해야했으며이 모듈이 제대로 작동한다는 것을 알았습니다.
아웃 확인 replicate.api.php의 그것을 사용하는 것이 얼마나 쉽게 볼 수있는 파일을.