it-swarm.it

Come nascondere e / o impedire l'accesso ai campi in un modulo, ad esempio group_audience per gruppi organici

Questo mi ha disturbato per un po '.. Quando provo a nascondere campi come il campo del pubblico di gruppo o l'impostazione di pubblicazione da un modulo, al momento della convalida il modulo imposta entrambi questi campi su un valore null, anche se il valore predefinito come stato dichiarato correttamente.

Ho provato a usare Invisible, #access, unset nascosto niente funziona! Questo è molto preoccupante perché per il mio attuale progetto gli utenti possono modificare solo piccole parti del loro profilo in quel momento, ad esempio solo l'indirizzo o l'immagine, quindi se nascondo il pubblico del gruppo l'utente viene espulso dai gruppi di cui fa parte modificare.

Ho finito per usare il codice qui sotto per nascondere questi campi mantenendo l'utente nel loro gruppo.

$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>';

Qualcuno potrebbe pensare a un modo migliore per raggiungere questo obiettivo?

Grazie

9
silkAdmin

Modificare:

Ok l'ho capito. Inserisci questo nel tuo modulo personalizzato:

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

    }
}

Ciò imposterà il titolo del nodo della storia su "hot stuff" e NON verrà visualizzato sulla pagina perché #access = FALSE;

È possibile aggiungere più controllo di granularità all'interno di hook_form_alter () come

  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;
  }

Questo funziona per Drupal 6 e 7.

Vecchia risposta (ignora):

È passato un po 'di tempo da quando ho fatto qualcosa del genere, quindi potrei sbagliarmi. Se imposti il ​​[#value] Di un elemento del modulo, questo non sarà visibile sul modulo.

L'ho fatto in Drupal 6, hook_form_alter() in un modulo personalizzato. Non so se funzionerà in Drupal 7 e Non so se puoi farlo in una funzione di preelaborazione

6
iStryker

Puoi anche solo aggiungere la classe CSS "nascosta da elementi" all'elemento modulo

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

Come accennato in precedenza iStryker, sarebbe comunque possibile modificare il valore tramite la manipolazione DOM. Tuttavia, questo è un modo semplice e piacevole per nascondere un campo modulo (o qualsiasi altro elemento di rendering). La classe element-hidden È definita in system.base.css.

5
Chaulky