Tôi đã viết một giải pháp đơn giản có thể trong chủ đề đã được đề cập: https://drupal.org/node/1048644#comment-7822687 . Để thuận tiện, tôi sẽ dán nó ở đây.
Có một cách đơn giản để vô hiệu hóa các tab dọc trên một biểu mẫu, chỉ bằng cách thay đổi $form['additional_settings']['#type']
giá trị của biến 'fieldset'
thành triển khai hook_form_alter () hoặc hook_form_FORM_ID_alter () , nếu nó bằng 'vertical_tabs'
.
Bạn không cần thay đổi cài đặt truy cập hoặc đi bộ toàn bộ $form
mảng một cách đệ quy, cái sau tiêu tốn quá nhiều tài nguyên không cần thiết.
(Đã thử nghiệm trong Drupal 7.23 .)
/**
* Disable Vertical tabs on a form with simply changing the value of $form['additional_settings']['#type']
* @see https://drupal.org/node/1048644
*/
function form_disable_vertical_tabs(&$form){
// originally $form['additional_settings']['#type'] equals to 'vertical_tabs'
if(isset($form['additional_settings']['#type']) && ($form['additional_settings']['#type'] === 'vertical_tabs')){
$form['additional_settings']['#type'] = 'fieldset';
}
}
/**
* Implements hook_form_alter().
*/
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'my_form_id'){
// disable vertical tabs for this form
form_disable_vertical_tabs($form);
}
}
Tất nhiên, tất cả, thay thếMYMODULEORTHEMENAME
cho tên của mô-đun hoặc chủ đề của riêng bạn (tên sau trong template.php
tệp) vàmy_form_id
id của biểu mẫu của bạn.
Bạn cũng có thể vô hiệu hóa các trường dọc chỉ dành cho người dùng KHÔNG có vai trò quản trị viên :
/**
* Implements hook_form_alter().
*/
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {
global $user;
$is_administrator = in_array('administrator', array_values($user->roles));
if($form_id == 'my_form_id'){
// if $user does NOT have the administrator role.
if (!$is_administrator) {
// disable vertical tabs for this form
form_disable_vertical_tabs($form);
}
}
}
Trong trường hợp ai đó quan tâm, tôi đính kèm một bản vá (mà không giống như ở trên) để Dripman mô-đun sandbox 's: # 2.080.739: Đơn giản hóa phương pháp vô hiệu hóa các tab theo chiều dọc với chỉ cần thay đổi $form['additional_settings']['#type']
để'fieldset'
.