2010-03-09 94 views
2

我試圖在提交或編輯後將字符串附加到CCK節點的正文字段。但是,我無法在alter形式的body字段中工作。我最初的嘗試是通過使用.運算符將字符串附加到正文字段來修改提交處理程序中的正文字段。將文本附加到Drupal中的正文字段

//Calling this submit function to add string to body. 
function appendToBody_submit_function($form, &$form_state) { 
$form_state['values']['body'] = array('0' => array('value' => $form['#body'])) . $stringToAppend; 
} 

但是,我不能得到這個工作,我不知道這是正確的方式。我是Drupal的新手,有人能指點我嗎?我應該爲此使用node_api嗎?

回答

0

我建議安裝Devel module,這樣您就可以方便地將dpm($form_state);放入方法主體,從而輕鬆打印出$form_state的內容。我通常從這個開始,以確保價值觀是我所期望的。

// Replace "hook" in the function name with the name of your module. 
function hook_submit($form, &$form_state) { 
    // dpm($form_state); // Debug code to view the contents of $form_state. 
    $body = $form_state['values']['body'] . ' new string to append'; 
    // Place code to save this data to your database here. 
} 
+0

@jwhat - 通過「在這裏放置代碼以將這些數據保存到您的數據庫中。「 - 你的意思是插入/更新?我總是操縱$ form_state變量。如果它是一個更新,我會看到如何工作,但我不知道如果它是一個新節點會如何工作? – newGuy 2010-03-10 03:02:32

+0

如果在標準提交處理程序被調用之前發生操作,則不需要顯式保存數據,請參閱我的單獨答案。 – 2010-03-10 10:07:19

+0

是的,在這種情況下,您不需要明確地保存數據。您可能只需要將您的任務更改爲(如Henrik所述):$ form_state ['values'] ['body'] = $ form_state ['values'] ['body']。 $ stringToAppend; – jwhat 2010-03-10 15:44:37

1

我假設你添加自定義的通過hook_form_alter()提交回調形式#submit陣列。

如果前加入該陣列中的任何其他條目(而不僅僅是追加的話),你的回調應該在標準提交函數之前調用。這樣一來,所有你需要做的是調整「到位」的$form_state['values']['body']內容,這將進一步處理該標準被拾起(隨後保存)提交回調暗示:

/** 
* Implementation of hook_form_alter() 
*/ 
function yourModule_form_alter(&$form, $form_state, $form_id) { 
    // Is this a node edit form? 
    if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] .'_node_form' == $form_id) { 
    // Yes, add custom submit handler *before* already existing ones 
    array_unshift($form['#submit'], 'appendToBody_submit_function'); 
    } 
} 

// Custom submit function to add string to body. 
function appendToBody_submit_function($form, &$form_state) { 
    $form_state['values']['body'] = $form_state['values']['body'] . $stringToAppend; 
} 
+0

使用過,創造奇蹟!我還鉤入了hook_form_alter,並在編輯模式下修改了'已查看'字段(對於以前用未調整的'新字符串'內容保存的字段)。 (*讚揚* Henrik) – 2012-10-04 20:04:27