J'ai écrit une solution possible simple dans le fil déjà mentionné: https://drupal.org/node/1048644#comment-7822687 . Pour plus de commodité, je vais le coller ici.
Il existe un moyen simple de désactiver les onglets verticaux d'un formulaire, en changeant simplement la $form['additional_settings']['#type']
valeur de la variable en 'fieldset'
dans une implémentation de hook_form_alter () ou hook_form_FORM_ID_alter () , si elle est égale à 'vertical_tabs'
.
Vous n'avez pas besoin de modifier les paramètres d'accès ou de parcourir l'ensemble du $form
tableau de manière récursive, ce dernier consomme inutilement trop de ressources.
(Testé dans 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);
}
}
C'est tout, bien sûr, remplacer le nomMYMODULEORTHEMENAME
de votre propre module ou thème (ce dernier dans un template.php
fichier), etmy_form_id
l'ID de votre formulaire.
Vous pouvez également désactiver les champs verticaux uniquement pour les utilisateurs qui n'ont PAS le rôle d'administrateur :
/**
* 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);
}
}
}
Au cas où quelqu'un est intéressé, je joint un patch (qui fait la même chose que ci - dessus) pour Dripman module bac à sable de: # 2080739: Simplifier la méthode de désactivation des onglets verticaux avec juste changer le $form['additional_settings']['#type']
pour'fieldset'
.