我試圖禁用幾個字段,並通過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()內的任何類型的字段的最佳方法是什麼?
謝謝
謝謝回覆。我沒有$ form的問題,我問的是如何通過$ page數組來完成它們,它們的方式就像Drupal 7一樣。我的意思是使用新的hook_page_alter()函數。 – Mehr 2011-03-25 04:04:52
如果你想改變一個表單中的字段,Drupal喜歡它的方式就是用'hook_form_alter'來做 – 2011-11-17 10:13:55
API doc是錯誤的,並且誤導了http://api.drupal.org/api/drupal/developer%21topics%21forms_api_reference .html/6#已禁用 – Sivaji 2012-10-08 07:36:43