我正在尝试禁用几个字段并通过 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() 内禁用/只读任何类型的字段的最佳方法是什么吗?
谢谢