2013-06-12 14 views
5

私は3種類のユーザーを持っています - 管理者、LA管理者とユーザー。管理者とLAの管理者がユーザー名、パスワード、およびタイムゾーンを編集できないように設定しようとしています。私は管理者用のデフォルトのユーザー編集フォームについて話しています。フォームIDは「ユーザープロフィールフォーム」です。Drupalのユーザー編集フォームで特定のフィールドを非表示にする方法はありますか?

私はカスタムモジュールを作成しましたが、これは機能していないようです。私は間違って何をしているのだろうか?

でも、var_dumpは出力されていないようです。キャッシュをクリアして、モジュールが有効になっていることを確認しました。あなたがあなたのモジュール名profile_changehookを交換したhook_form_alter()の形式でそれを使用しているように、私はあなたにモジュール名を想定しています

function profile_change_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id === 'user-profile-form') { 
     var_dump ($form); 

     hide($form['account']['pass']); 
     hide($form['account']['current_pass_required_values']); 
     hide($form['account']['current_pass']); 
    } 
} 
+0

代わりに無効にしてください。意味があります。 –

答えて

3

PROFILE_CHANGE &です。

3 '='記号は、フォームIDを確認する条件を指定します。これはuser-profile-formです。私は'==' &という単純な等号を付けています。

function profile_change_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'user-profile-form') { 
     hide($form['account']['pass']); 
     hide($form['account']['current_pass_required_values']); 
     hide($form['account']['current_pass']); 
    } 
} 

var_dump()を使用しないでください、あなたはいつもちょうどフォーム変更のためのあなたのフック関数の後にdpm($form)よう$formの出力を確認しDEVEL &を使用する必要があります。これにより、フォームに関するすべての情報が提供されます。ここでは、ページ上にフォームがあります。

function profile_change_form_alter(&$form, $form_state, $form_id) { 
    dpm($form); 
} 
3

は、実際に私はそれが機能するために私のコードでuser_profile_formuser-profile-formを変更しなければなりませんでした。なんらかの理由で、drupalにはアンダースコアが必要です。

+1

'$ form_id'は、HTML IDではなく、PHPの関数名から取得したフォームのIDです(これは一貫性があるとは限りません)。そのため、何らかの理由で – Clive

+1

という形式を変更するとハイフンではなくアンダースコアが含まれているのは、ダッシュとアンダースコアが同等の文字列ではないためです。マークアップのDrupal出力にはダッシュが含まれていますが、内部的にはアンダースコアが使用されています。あなたのソースを見て、 'input [name =" form_id "]'を見つけてその正確な値を使ってフォームIDを見つけることができます。このjQueryスニペットをブラウザのコンソールでDrupalの管理フォームページで実行してみてください: 'jQuery( 'input [name =" form_id "]')。val()' –

5

hide()を使用すると、フィールドは削除されますが、hideはフィールドレンダリングを遅延させるためのものです。それを非表示にしても、テンプレートファイルでは他の場所で印刷します。 後で印刷しないと、ページにレンダリングされず、保存されません。妥当性検査エラーなどが発生した場合は、保存しないでください。

あなたはそれを非表示にするので、ユーザーはそれを見ることはできませんが、フォームのような現場での使用に何かの前回値保持する場合:

$form['field_yourfield']['#access'] = FALSE; 

を、あなたはそれが見えるようにしたい場合は、しかし、無効にします(ユーザーは値を変更できません)。

$form['field_yourfield']['#disabled'] = TRUE; 
+1

ありがとうございます –

関連する問題