我正在尝试在内容类型成为"必需"之前设置内容类型的"标题"值。因此,发生的情况是标题字段根据用户名被隐藏,在填写"名字"和"姓氏"字段后,我需要获取这些值,然后将它们应用于"标题"字段,然后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);
}
在我目前的实现中,它并没有完全按照我的意愿做,因为它抛出了"必填字段"错误。
您遇到的问题是您的新提交函数永远不会被执行。 表单将首先遍历所有验证函数。
您需要设置一个新的验证函数,并确保在验证过程开始时插入它(以便您可以在节点验证之前设置标题):
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中期验证的忠实粉丝,但这应该有效。