0

"required" になる前に、コンテンツ タイプの "title" 値を設定しようとしています。したがって、ユーザー名に基づいてタイトルフィールドが非表示になり、「名」フィールドと「姓」フィールドに入力した後、これらの値を取得して「タイトル」フィールドに適用する必要があります。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);
}

私の現在の実装では、「必須フィールド」エラーがスローされているため、私が望むことをまったく行っていません。

4

1 に答える 1

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 を変更するのが好きではありませんが、これはうまくいくはずです。

于 2013-09-23T19:04:50.503 に答える