Drupal 7 如何在Drupal 7中禁用字段或使其只读

Drupal 7 如何在Drupal 7中禁用字段或使其只读,drupal-7,field,form-api,Drupal 7,Field,Form Api,我试图通过hook\u page\u alter()禁用两个字段并使它们成为只读字段。我能够检查用户是否正在查看页面编辑部分(表单编辑) 然后,当我尝试禁用两个字段时,我发现选择列表可以通过以下代码禁用: $page['content']['system_main']['field_my_field_name_a_select_list']['und']['#attributes']['disabled'] = TRUE; 但是,如果我使用以下代码,它将不起作用: $page['content

我试图通过hook\u page\u alter()禁用两个字段并使它们成为只读字段。我能够检查用户是否正在查看页面编辑部分(表单编辑)

然后,当我尝试禁用两个字段时,我发现选择列表可以通过以下代码禁用:

$page['content']['system_main']['field_my_field_name_a_select_list']['und']['#attributes']['disabled'] = TRUE;
但是,如果我使用以下代码,它将不起作用:

$page['content']['system_main']['field_my_field_name_a_select_list']['und']['#disabled'] = TRUE;
我还发现我不能使用相同的代码禁用文本区域字段:

$page['content']['system_main']['field_my_text_area']['und']['#attributes']['disabled'] = TRUE;
上面的代码没有禁用文本区域,但是相同的代码可以禁用选择列表

然后我尝试了hook_form_alter()来做同样的事情,我能够禁用字段,当我从$page数组检查呈现的数组时,我看到它显示:

$page['content']['system_main']['field_my_field_name_a_select_list']['und']['#disabled'] = TRUE;
但是当我在hook_page_alter()中设置相同的代码时,它不起作用。看起来其他东西会覆盖它,我认为hook\u page\u alter()是最后一个更改标记的地方

知道在Drupal7的hook\u page\u alter()中禁用/只读任何类型字段的最佳方法是什么吗


谢谢

它适用于文本字段^

$form['field_secured_title']['und']['0']['value']['#attributes']['disabled'] = TRUE;
就像书中说的那样

您可以使用以下属性:

$form['#attributes'] = array('disabled' => TRUE);

谢谢你的回复。我对$form没有异议,我要问的是如何通过$page数组来实现它,它们就像Drupal 7一样。我的意思是使用新的hook\u page\u alter()函数。如果您想更改表单中的字段,Drupal使用
hook\u form\u alter
API文档的方式是错误的,并且误导了Sivaji-您链接的是D6 API文档,而不是D7。表单API中有一个禁用的参数
$form['#attributes'] = array('disabled' => TRUE);