我的需求是改變編輯表單的行爲,爲幾種內容類型。Drupal 7,保存新節點,同時編輯舊
其目的是: - 按下更新按鈕後,不要更新節點,而是使用舊節點的值創建新節點。我可以通過將舊節點的字段值傳遞給「/ node/add/my_content」表單來做到這一點,但這需要很多工作(表單非常複雜),並且在編輯頁面中我已經準備好了所有值。
所以我已經嘗試過hook_form_alter
function mymodule_form_alter (&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'my_not_update_form':
$node = $form_state['node'];
if (!isset($node->nid) || isset($node->is_new)) {
// This is a new node.
}
else {
$new_node = new StdClass();
$new_node->type = 'my_not_update_form';
node_object_prepare($new_node);
$new_node->uid = $user->uid;
$new_node->language = 'und';
$new_node->title = NULL;
$form['vid']['#value'] = NULL;
$form['nid']['#value'] = NULL;
$form['created']['#value'] = $new_node->created;
$form['changed']['#default_value'] = NULL;
$form['#node'] = $new_node;
$form['#entity'] = $new_node;
$form_state['node'] = $new_node;
$form_state['build_info']['args'][0] = $new_node;
}
break;
}
}
因此,與上面的代碼我能夠創建一個新的節點,但在「創建日期」參數始終保持不變爲創建舊節點的日期參數,上述任何一條都不能解決這個問題。
這不是我的問題點。我沒有通過常規方式創建新節點。我正在更新節點,並且想要覆蓋$ form和$ form_state變量來欺騙node_form_submit(),這個函數會認爲將要保存的數據是新節點而不是舊節點。 – szikael
我已經對代碼進行了更改,以便它能夠滿足您的評論。 – timgeek