2013-06-12 5 views
5

Quindi ho tre tipi di utenti: admin, LA admin e utenti. Sto cercando di configurarlo in modo che amministratori e amministratori di LA non possano modificare nome utente, password e fuso orario per gli utenti. Sto parlando del modulo di modifica utente predefinito per gli amministratori e l'ID modulo è "modulo profilo utente".Come nascondere determinati campi nel modulo Modifica utente in Drupal?

Ho creato un modulo personalizzato ma questo non sembra funzionare. Qualche idea su cosa potrei fare storto?

Anche il var_dump non sembra essere in uscita. Ho cancellato la cache e verificato che il modulo sia abilitato.

function profile_change_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id === 'user-profile-form') { 
     var_dump ($form); 

     hide($form['account']['pass']); 
     hide($form['account']['current_pass_required_values']); 
     hide($form['account']['current_pass']); 
    } 
} 
+0

Invece renderli disabilitati, questo ha senso! –

risposta

3

Io parto dal presupposto è il modulo nome è PROFILE_CHANGE & in modo che si è utilizzato nel formato di hook_form_alter(), in cui è stato sostituito hook con il nome del modulo profile_change.

Hai inserito 3 '=' segno in cui si sta dando condizione per controllare l'ID del modulo, che è user-profile-form. Ho messo il segno di uguale semplice che è '==' & sta funzionando.

function profile_change_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'user-profile-form') { 
     hide($form['account']['pass']); 
     hide($form['account']['current_pass_required_values']); 
     hide($form['account']['current_pass']); 
    } 
} 

Non utilizzare var_dump(), Si dovrebbe sempre usare DEVEL & controllare l'output di $form come dpm($form) subito dopo la funzione gancio per modulo alterare. Questo ti darà tutte le informazioni sul modulo, dove mai hai un modulo sulla tua pagina.

function profile_change_form_alter(&$form, $form_state, $form_id) { 
    dpm($form); 
} 
3

In realtà ho solo dovuto cambiare user-profile-form a user_profile_form nel mio codice per farlo funzionare. Per qualche ragione, drupal richiede caratteri di sottolineatura.

+1

Il '$ form_id' è l'ID del modulo preso dal suo nome di funzione PHP, non l'ID HTML (che non è garantito essere coerente). Ecco perché contiene caratteri di sottolineatura e non trattini quando si modifica il modulo – Clive

+1

"per qualche motivo" è perché trattini e caratteri di sottolineatura non sono stringhe equivalenti. Le uscite markup Drupal contengono trattini, ma internamente utilizza caratteri di sottolineatura. Puoi trovare l'ID modulo visualizzando la tua fonte e trovando 'input [nome =" form_id "]' e usando quel valore esatto. Prova a eseguire questo frammento jQuery nella console del browser su qualsiasi pagina del modulo di amministrazione Drupal: 'jQuery ('input [nome =" form_id "]'). Val()' –

5

Se si utilizza hide() si rimuoverà il campo, ma hide è più per il rendering del campo "delaying" ... Come si nasconde, ma poi (nel file di modello) lo si stampa in qualche altro posto. Perché, se non lo stampi più tardi, non verrà visualizzato nella pagina, non verrà salvato, se è obbligatorio otterrai un errore di convalida e così via.

Se si desidera nascondere, quindi l'utente non può vedere, ma si desidera che il modulo per mantenere il valore precedente del uso sul campo qualcosa come:

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

e se si desidera che sia visibile, ma disabilitato (l'utente non può modificare il suo valore) quindi:

$form['field_yourfield']['#disabled'] = TRUE; 
+1

Grazie sta funzionando –