2010-12-08 5 views
1

"form_mods"というフォームを変更するための小さなモジュールを作成しました。私が変更しているフォームは "user_profile_form"です。私は「プロフィール」と呼ばれる余分なフィールドのカテゴリを追加しました。 "profile_state"というDrupal管理者のselectフィールドを作成しました。私のモジュールでキーの値の状態リストを変更していますが、管理者としてログインしていても試している匿名ユーザーレジスタには、空の状態選択フィールドが表示されます。ここにアクセス許可の問題はありますか?私は 'access' => user_access( 'access content')をフィールドに追加しようとしましたが、うまくいきませんでした。ここに私のコードです:Drupal hook_form_alter匿名ユーザーはフィールドを見ることができません

function form_mods_form_alter($form, $form_state, $form_id) { 

    switch ($form_id) { 

     ## user_profile_form ################################################################################### 
     case 'user_profile_form': // This is our form ID. 

      //echo '###'.$form['_category']['#value'].'###'; 
      if($form['_category']['#value'] == 'Profile'){ 

       // Modify the states dropdown list 
       $states = load_states_list(); 
       $form['Profile']['profile_state'] = array(
        '#type' => 'select', 
        '#title' => t('State'), 
        '#options' => $states, 
        '#required' => TRUE, 
        '#default_value' => isset($form['Profile']['profile_state']['#default_value']) ? $form['Profile']['profile_state']['#default_value'] : '', 
        '#element_validate' => array('profile_state_validate') 
       ); 

      } 
     #################################################################################### 
     break; 

    } 

} 

function load_states_list() { 

    $states = array('' => '-- Select a state'); // add a default empty value 
    $results = db_query("SELECT * FROM {states_list} ORDER BY name ASC"); 
    while ($state = db_fetch_array($results)) { 
     $states[$state['code']] = $state['name']; 
    } 

    return $states; 

} 

おかげで、すべての

+0

を古い質問を掘るために、これが解決されている場合、あなたは答えとして地雷をマークすることができない。ここで

は働く私の新しいコードのですか?これまでに何票も投票し、問題を解決しました。私はゆるいぶら下がりの答えをきれいにしようとしています。ありがとう! – mikesir87

答えて

3

まず、あなたがしている機能は、これまで実行しますよろしいですか?機能をあなたのやり方に任せて、私はそうは思わない。モジュール名は「form_mods」である場合にのみuser_profile_formフォームを修正しているので、あなたの関数は

function form_mods_form_alter 

それとも...と呼ばれるべきである、あなたは、今

function form_mods_user_profile_form_alter 

関数名を使用することができますパラメータリストの$フォームの前に&がないために機能しない理由があります。 &は、基本的に変数を参照として渡します。したがって、$ form変数に対する変更はすべて保存され、呼び出し元関数に返されます。だから、あなたの関数が

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

OR

function form_mods_user_profile_form_alter(&$form, &$form_state) { 

リファレンスのようになります。http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_form_alter/6

-2

あなたは、参照リンクにmikesir87ありがとうございました。私は自分の問題を理解した。 作成したフィールドを使用している2つの異なるフォームがあります。彼らは異なるフォームIDを持っています。私は "user_profile_form"と "user_register"フォームIDを探す必要があります。

function form_mods_form_alter($form, $form_state, $form_id) { 

    if((($form_id == 'user_profile_form') && ($form['_category']['#value'] == 'Profile')) || ($form_id == 'user_register')){ 

      // Modify the states dropdown list 
      $states = form_mods_load_states_list(); 
      $form['Profile']['profile_state'] = array(
       '#type' => 'select', 
       '#title' => t('State'), 
       '#options' => $states, 
       '#required' => TRUE, 
       '#default_value' => isset($form['Profile']['profile_state']['#default_value']) ? $form['Profile']['profile_state']['#default_value'] : '' 
      ); 

    } 

} 

おかげ

+1

元の投稿を更新してください。また、関数の名前を正しく変更しなかったようです。その関数があなたが作成した "form_mods"モジュールに存在する場合、その関数はform_mods_form_alter()と呼びます。 –

+0

ありがとうございます。今修正されました。元の投稿を返信するのではなく、自分の解決策で更新することを意味しますか?ありがとう – EricP

関連する問題