2011-03-23 34 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);