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); }
}
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();
}