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

时间:2011-03-23 00:03:36

标签: drupal-7 field form-api

我正在尝试禁用几个字段,并通过hook_page_alter()使它们只读。我能够检查用户是否正在查看页面编辑部分(表单编辑)

$page['content']['system_main']['#node_edit_form'] == TRUE)

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

$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_page_alter()是最后一个改变标记的地方。

任何想法在drupal 7中的hook_page_alter()内禁用/ readonly任何类型字段的最佳方法是什么?

谢谢

2 个答案:

答案 0 :(得分:17)

适用于文本字段^

$form['field_secured_title']['und']['0']['value']['#attributes']['disabled'] = TRUE;

答案 1 :(得分:2)

就像它在the docs

中所说的那样

您可以使用属性:

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