Я написал простое возможное решение в уже упомянутой теме: https://drupal.org/node/1048644#comment-7822687 . Для удобства я вставлю это сюда.
Есть простой способ отключить вертикальные вкладки на форме, просто изменив значение $form['additional_settings']['#type']
переменной на 'fieldset'
в реализации hook_form_alter () или hook_form_FORM_ID_alter () , если оно равно 'vertical_tabs'
.
Вам не нужно менять настройки доступа или $form
рекурсивно обходить весь массив, последний излишне потребляет слишком много ресурсов.
(Проверено в 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);
}
}
Это, конечно, все, что заменяет имяMYMODULEORTHEMENAME
вашего собственного модуля или темы (последнее в template.php
файле) иmy_form_id
идентификатор вашей формы.
Вы также можете отключить вертикальные поля только для пользователей, которые НЕ имеют роли администратора :
/**
* 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);
}
}
}
В случае , если кто - то заинтересован, я прикрепил патч (который делает то же самое, что и выше) для Dripman песочнице модуля «s: # 2080739: Упрощает метод отключения вкладки Вертикально только с изменяя $form['additional_settings']['#type']
к'fieldset'
.