2011-03-23 38 views
6

我试图禁用几个字段,并通过hook_page_alter()使它们只读。我能够做检查,如果用户正在浏览的页面编辑部分(表格编辑)如何禁用字段或在Drupal 7中使其只读只读

$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['content']['system_main']['field_my_field_name_a_select_list']['und']['#disabled'] = TRUE; 

但是当我在hook_page_alter()中设置了相同的代码,但它不起作用。看起来像别的东西会覆盖它,我认为hook_page_alter()是最后一个改变标记的地方。

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

谢谢

回答

13

它适用于文本字段^

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

谢谢回复。我没有$ form的问题,我问的是如何通过$ page数组来完成它们,它们的方式就像Drupal 7一样。我的意思是使用新的hook_page_alter()函数。 – Mehr 2011-03-25 04:04:52

+3

如果你想改变一个表单中的字段,Drupal喜欢它的方式就是用'hook_form_alter'来做 – 2011-11-17 10:13:55

+0

API doc是错误的,并且误导了http://api.drupal.org/api/drupal/developer%21topics%21forms_api_reference .html/6#已禁用 – Sivaji 2012-10-08 07:36:43

2

就像它在the docs

说,你可以使用属性:

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