Désactiver les onglets verticaux par type de contenu ou rôle d'utilisateur

10

Certains utilisateurs peuvent uniquement avoir la possibilité de modifier l'un des ensembles de champs qui s'affiche dans les onglets verticaux du formulaire de modification de nœud. Dans un tel cas, il semble plutôt idiot d'utiliser des onglets verticaux car il n'y a qu'un seul onglet vertical à choisir. Voir capture d'écran:

capture d'écran

Alors, est-il possible de désactiver les onglets verticaux par rôle d'utilisateur? Ou, à moins que cela, les désactiver complètement pour certains types de contenu? Pour mon cas d'utilisation, je veux juste que l'emplacement ne soit pas affiché dans les onglets verticaux.

J'ai essayé Renderable Fields et Field Group ensemble mais ils ont mal géré le formulaire (buggy, je pense). Les champs d'organisation ne peuvent pas séparer les onglets verticaux.

Geai
la source
Avez-vous déjà résolu ce problème? Essayer de faire la même chose avec l'onglet du produit ubercart.
Dee

Réponses:

7

Il existe plusieurs façons de procéder:

  1. Vous pouvez utiliser le module Renderable Elements (comme vous l'avez mentionné ci-dessus). Il vous permet d'enregistrer n'importe quel élément de build sur votre installation et de gérer l'affichage via Field UI. Il mettra à disposition des éléments (supplémentaires) des entités existantes sur les formulaires de gestion / écrans d'affichage ou vous pouvez par exemple enregistrer le formulaire de contact et réorganiser les champs via Field UI. Fonctionne actuellement très bien sur les formulaires, le support des autres arrive dans une deuxième itération.

  2. Ou ajoutez ce qui suit à votre module personnalisé:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
    
  3. Un module sandbox qui désactive les onglets verticaux

Voici ce problème central qui se réfère à cela.


la source
Comme je l'ai dit dans la question, Renderable Elements ne fonctionne pas pour moi. Il est toujours en phase alpha et il y a un bug connu avec Location. Donc ça ne marche pas pour ma situation. Sinon, oui, je pense que cela fonctionnerait. Si à l'avenir ce bogue est corrigé, Renderable Elements est probablement la meilleure façon de procéder.
Jay
désolé, je viens de survoler votre question et j'ai complètement raté votre référence au module d'éléments rendus. Cela étant dit, la version dev fonctionne comme un charme. Essayez ça.
Hmm, ok. J'essaierai d'utiliser la version dev s'il n'y a pas d'autres alternatives. Laissant cela ouvert pour l'instant.
Jay
J'ai modifié ma réponse ci-dessus avec plus d'options.
1
Tu as raison. Je viens de l'essayer et cela ne fonctionne pas en D7 comme en D6. Malheureusement, si les éléments pouvant être rendus ne fonctionnent pas et que vous n'êtes pas à l'aise avec votre propre module ou en utilisant le module sandbox, je ne sais pas quoi d'autre.
6

Vous pouvez également utiliser la vérification #access pour empêcher les utilisateurs de voir les onglets verticaux.

$form['additional_settings']['#access'] = FALSE;

Ajoutez simplement cela à un crochet ou modifiez le chargement et le rendu d'un formulaire. Après cela, vous pouvez appeler render ($ form) pour obtenir le balisage.

Derek Webb
la source
2

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 $formtableau 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.phpfichier), 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' .

Sk8erPeter
la source
Excellente solution, @ Sk8erPeter. Je me demande s'il est possible de masquer les paramètres supplémentaires sans définir '#access' = FALSE, car cela perd les valeurs qui seraient définies par les paramètres par défaut, tels que l'alias d'URL et l'état publié.
Jav
0

Les éléments capables de rendu ne sont actuellement pas pris en charge et reconnaissent sur la page du projet qu'ils se heurtent à d'autres modules contribués, donc je ne compterais pas dessus pour les sites de production.

La question de savoir comment désactiver complètement les onglets verticaux est abordée dans ce fil .

Dripman a créé un module sandbox simple pour désactiver complètement les onglets verticaux.

En fonction de votre niveau d'engagement souhaité avec le codage, le module de Dripman devrait être facilement personnalisable pour être sélectif en fonction des champs / rôles.

Toutes mes excuses pour le chevauchement avec une réponse succincte de @nicoz

autopoïétique
la source
0

Vous pouvez utiliser le module Visibilité des onglets verticaux .

Ce module permet de gérer la visibilité des onglets verticaux sur les formulaires d'ajout / modification de type de contenu.

Pour gérer la visibilité des onglets verticaux sur les types de contenu, ajoutez / modifiez des formulaires. visitez simplement la /admin/config/user-interface/vertical-tabs-visibility page et sélectionnez les types de contenu. Les onglets verticaux du formulaire d'ajout / modification de noeud seront désactivés pour les types de contenu cochés.

Le module est actuellement dans le bac à sable

milkovsky
la source
0

Pour mon cas d'utilisation, j'essayais de désactiver les onglets verticaux appliqués dans la section Options de publication d'un formulaire de modification de nœud (car c'était le seul jeu de champs auquel un ensemble particulier d'utilisateurs avait accès):

// Place somewhere in MYMODULE_form_alter()...
$form['additional_settings']['#type'] = 'fieldset';
$form['additional_settings']['#collapsible'] = FALSE;
$form['options']['#collapsible'] = FALSE;

Pour plus de précision, non seulement vous devez définir la additional_settings #collapsiblevaleur FALSE, mais tous les éléments contenus doivent également avoir l' élément #collapsible set toFALSE , in my case that was theoptions`.

tyler.frankenstein
la source