web-dev-qa-db-ja.com

DrupalGapで編集不可能なプロファイルフィールドを非表示にするにはどうすればよいですか?

Drupalgapユーザープロファイルには、表示可能である必要があるが、ユーザーが編集できないフィールドがあります。フィールド権限を使用していますが、権限は尊重されています。ユーザーは値を変更/保存/更新できません。

ただし、このフィールドはプロファイルの編集ビューに表示され、編集可能に見えます。これは意図されたものですか?

編集ユーザービューでフィールドを非表示にするにはどうすればよいですか? hook_form_alterを使用して特定のフィールドを個別にターゲットにするのが最善の方法ですか?

/**
* Implements hook_form_alter().
*/

function my_module_form_alter(form, form_state, form_id){
 try {

console.log("Form ID " + form_id); // Use to see the form id.
console.log("FORM: " + JSON.stringify(form));    // Use to inspect the form.

if (form_id == 'user_profile_form') {
   $('#edit-user-profile-form-field-points-und-0-value').css("background-color","yellow"); // not working
   $('#edit-user-profile-form-field-points').css("background-color","yellow"); //not working
   $('#edit-user-profile-form-field-points-und-0-value').hide(); //not working

// not working from: https://www.drupal.org/node/2170427: 
 form.elements.edit-user-profile-form-field-points-und-0-value = {
 // type: 'textfield',
 // title: 'My Text Fied',
  options: {
    attributes: {
      disabled: 'disabled'
    }
  },
  access: false /* use this to completely hide the form element */
};

console.log("this is user_profile_form");
}
}
 catch (error) { console.log('my_module_form_alter - ' + error); }   
}
1
user24957

DrupalGapでのhook_form_alter()の実装中、フォームはまだDOMにレンダリングされていないため、その時点では、フォームでjQueryセレクターを使用することはまだできません。

代わりに、インラインJSイベントを使用します(フォームの変更中にフォームのプレフィックスまたはサフィックスに添付します)。インラインJSページイベントハンドラーはカスタム関数を持つことができ、そのカスタム関数はカスタムjQueryセレクターを実行できます。また、これはaccessプロパティの誤った使用法のようです。代わりにこれを試してください:

// During hook_form_alter()...
form.elements['field_points'].access = false;
form.suffix += drupalgap_jqm_page_event_script_code({
    page_id: drupalgap_get_page_id(),
    jqm_page_event: 'pageshow',
    jqm_page_event_callback: 'my_user_profile_form_pageshow',
    jqm_page_event_args: JSON.stringify({
        hello: 'Hi!'
    })
});

次に、カスタム関数を作成します。

function my_user_profile_form_pageshow(options) {
  $('#edit-user-profile-form-field-points-und-0-value').css("background-color","yellow");
  $('#edit-user-profile-form-field-points').css("background-color","yellow");
  $('#edit-user-profile-form-field-points-und-0-value').hide();
}
1