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


9

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


Questa risposta non è perfetta perché l'uso può ancora cambiare il valore con la manipolazione DOM
iStryker

Risposte:


6

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 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 con Drupal 6 e 7.

Vecchia risposta (ignora):

È passato un po 'di tempo da quando ho fatto qualcosa del genere, quindi potrei sbagliarmi. Se si imposta l' [#value]elemento di un 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 è possibile farlo in una funzione di preelaborazione


Grazie per la tua risposta, anche se purtroppo non ha funzionato nel mio caso, i campi del modulo hanno già un #valore pre-archiviato in quanto sono moduli di modifica
silkAdmin

@silkAdmin Si prega di vedere nuove modifiche
iStryker

Grazie Stryker per aver dedicato del tempo a scavare intorno a questo, anche se la tua tecnica di cui sopra funziona nascondendo i campi sembra che il valore predefinito non sia preso in considerazione nemmeno durante l'invio. Quindi finisco con l'utente che viene ancora espulso dal suo gruppo ad ogni modifica del profilo. Finora solo il trucco del suffisso #prefix # sembra farlo funzionare normalmente.
silkAdmin,

$ form ['title'] ['# value'] = $ form ['title'] ['# default_value']
iStryker

5

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 element-hiddenclasse è definita in system.base.css.


Amico, mi hai salvato. Grazie. Tutti gli altri metodi che ho visto non generano gli elementi nel modulo stesso. Nel mio caso, voglio nascondere gli elementi del modulo in un modulo contrib che si aspetta che questi siano nel modulo, altrimenti non funzionerà correttamente. La correzione CSS nasconde gli elementi indesiderati ma tutto funziona ancora. Grazie anche per aver notato che questo non è "a prova di hacker" e funziona solo ogni volta che tutto ciò che serve è semplificare l'interfaccia che presenti agli utenti dell'editor di fiducia.
Mario Awad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.