web-dev-qa-db-fra.com

Comment masquer et / ou empêcher l'accès aux champs d'un formulaire, tels que group_audience pour les groupes organiques

Cela me dérange depuis un certain temps. Lorsque j'essaie de masquer des champs comme le champ d'audience de groupe ou le paramètre de publication d'un formulaire, lors de la validation, le formulaire a défini ces deux champs sur une valeur nulle, même si la valeur par défaut est été correctement déclaré.

J'ai essayé d'utiliser Invisible, #access, unset cache rien de travail! C'est très problématique car pour mon projet actuel, les utilisateurs ne peuvent modifier que de petits morceaux de leur profil à la fois, par exemple juste l'adresse ou l'image, donc si je cache l'audience du groupe, l'utilisateur finit par être expulsé des groupes auxquels il appartient à chaque fois. Éditer.

J'ai fini par utiliser le code ci-dessous pour masquer ces champs tout en gardant l'utilisateur dans son groupe.

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

Quelqu'un pourrait-il penser à une meilleure façon d'y parvenir?

Merci

9
silkAdmin

Éditer:

Ok je l'ai compris. Mettez ceci dans votre module personnalisé:

function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}

Cela définira le titre du nœud de l'histoire sur "hot stuff" et il ne sera PAS affiché sur la page car #access = FALSE;

Vous pouvez ajouter plus de contrôle de granularité dans hook_form_alter () comme

  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }

Cela fonctionne pour Drupal 6 & 7.

Ancienne réponse (ignorer):

Cela fait un moment que je n'ai pas fait quelque chose comme ça, donc je peux me tromper. Si vous définissez le [#value] D'un élément de formulaire, il ne sera pas visible sur le formulaire.

Je l'ai fait dans Drupal 6, hook_form_alter() dans un module personnalisé. Je ne sais pas si cela fonctionnera dans Drupal 7 et Je ne sais pas si vous pouvez le faire dans une fonction de prétraitement

6
iStryker

Vous pouvez également simplement ajouter la classe CSS "élément caché" à l'élément de formulaire

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

Comme iStryker l'a mentionné précédemment, il serait toujours possible de modifier la valeur via la manipulation DOM. Cependant, c'est un moyen agréable et facile de masquer un champ de formulaire (ou tout autre élément de rendu). Le element-hidden la classe est définie dans system.base.css.

5
Chaulky