2013-09-23 44 views
0

我試圖在「需要」之前設置內容類型的「標題」值。 因此,在填充「名字」和「姓氏」字段之後,標題字段會根據用戶名隱藏,然後在drupal聲明之前將這些值應用於「標題」字段該字段是必需的。這裏是我到目前爲止在驗證之前將字符串應用到字段

/** 
* Implements hook_form_alter(). 
*/ 

function editorhide_form_alter(&$form, &$form_state, $form_id){ 

global $user; 
global $fullTitle; 

if($form_id == 'artist_node_form'){  
    if($user->name == 'Editor'){   

     drupal_add_js("jQuery(document).ready(function(){ 
    jQuery('#edit-title').hide(); 
    });","inline");     
      //adding the form handler 
    $form['#submit'][] = "editorhide_form_submit_handler";   

    } 
} 

} 

//submit form handler. 

function editorhide_form_submit_handler ($form, &$form_state) { 

global $fullTitle; 
    $fullTitle = $form_state['values']['field_firstname']['und']['0']['value']; 
    $fullTitle .= ' '. $form_state['values']['field_lastname']['und']['0']['value']; 
    form_set_value($form['#edit-title'], $fullTitle,$form_state); 
} 

從我目前的實現,它是不是做我想要什麼比較,因爲它拋出了「必填字段」的錯誤。

+0

我使用hook_node_presave實現了同樣的行爲,並在那時設置了標題字段。我還建議使用drupal的contrib名稱模塊將名字和姓氏存儲在drupal內容類型中。 – pamatt

回答

0

您遇到的問題是您的新提交函數從未得到執行。表單將首先通過所有驗證函數。

您需要設置一個新的驗證功能,並確保它插在驗證過程的開頭(所以你可以設置之前,節點驗證標題):

array_unshift($form['#validate'], "editorhide_form_validate_handler"); 

那麼你的驗證可以做到以下幾點(可能需要調整數組索引):

function editorhide_form_validate_handler ($form, &$form_state) { 

    $fullTitle = $form_state['values']['field_firstname']['und']['0']['value']; 
    $fullTitle .= ' '. $form_state['values']['field_lastname']['und']['0']['value']; 
    $form_state['values']['title']['und']['0']['value'] = $fullTitle; 
} 

我不修改form_state中旬驗證一個巨大的風扇,但這應該工作。