【问题标题】:How to disable a field or make it readonly in Drupal 7如何在 Drupal 7 中禁用字段或使其只读
【发布时间】:2011-03-23 00:03:35
【问题描述】:

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

谢谢

【问题讨论】:

    标签: drupal-7 field form-api


    【解决方案1】:

    它适用于文本字段^

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

    【讨论】:

    • 感谢您的回复。我对 $form 没有问题,我要问的是如何通过 $page 数组来做到这一点,他们喜欢 Drupal 7。我的意思是使用新的 hook_page_alter() 函数。
    • 如果你想改变表单中的字段,Drupal 的做法是使用hook_form_alter
    • API 文档错误且误导api.drupal.org/api/drupal/…
    • Sivaji - 您链接的是 D6 API 文档,而不是 D7。
    • Form API api.drupal.org/api/drupal/…中有一个#disabled参数
    【解决方案2】:

    就像the docs中所说的那样

    你可以使用属性:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      相关资源
      最近更新 更多