Escribí una posible solución simple en el hilo ya mencionado: https://drupal.org/node/1048644#comment-7822687 . Por conveniencia, lo pegaré aquí.
Hay una manera simple de deshabilitar las pestañas verticales en un formulario, simplemente cambiando el $form['additional_settings']['#type']
valor de la variable 'fieldset'
en una implementación de hook_form_alter () o hook_form_FORM_ID_alter () , si es igual a 'vertical_tabs'
.
No es necesario cambiar la configuración de acceso o recorrer toda la $form
matriz de forma recursiva, esta última consume demasiados recursos innecesariamente.
(Probado en 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);
}
}
Eso es todo, por supuesto, sustituto del nombreMYMODULEORTHEMENAME
de su propio módulo o tema (este último en un template.php
archivo) ymy_form_id
de la identificación de su formulario.
También puede deshabilitar los campos verticales solo para usuarios que NO tienen la función de administrador :
/**
* 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);
}
}
}
En caso de que alguien esté interesado, adjunté un parche (que hace lo mismo que el anterior) al módulo de sandbox de Dripman: # 2080739: Simplifique el método de deshabilitar las pestañas verticales con solo cambiar el $form['additional_settings']['#type']
a'fieldset'
.