2013-06-12 14 views
5

Mam więc trzy typy użytkowników - admin, administrator LA i użytkownicy. Próbuję skonfigurować tak, aby administratorzy i administratorzy LA nie mogli edytować nazwy użytkownika, hasła i strefy czasowej dla użytkowników. Mówię o domyślnym formularzu edycji dla administratorów, a identyfikator formularza to "user-profile-form".Jak ukryć określone pola w formularzu edycji użytkownika w Drupal?

Utworzono niestandardowy moduł, ale wydaje się, że to nie działa. Masz pojęcie, co robię źle?

Nawet plik var_dump nie wydaje się wyprowadzać. Wyczyściłem pamięć podręczną i zweryfikowałem, że moduł jest włączony.

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

Zamiast tego spraw, aby były wyłączone, to ma sens! –

Odpowiedz

3

jestem zakładając Nazwa modułu jest PROFILE_CHANGE & tak że użyłeś go w formacie hook_form_alter(), gdzie zastąpiły hook z nazwą modułu profile_change.

Umieściłeś znak 3 '=' gdzie podajesz warunek sprawdzania identyfikatora formularza, który jest user-profile-form. Umieściłem prosty znak równości, który jest '==' & to działa.

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']); 
    } 
} 

Nie używaj var_dump(), należy zawsze używać DEVEL & sprawdzić wyjście z $form jak dpm($form) tuż po swojej funkcji hak do formy zmieniają. To da ci wszystkie informacje o formularzu, gdziekolwiek masz formularz na swojej stronie.

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

Właściwie miałem tylko zmienić user-profile-form do user_profile_form w moim kodu dla go do pracy. Z jakiegoś powodu drupal wymaga podkreśleń.

+1

'$ identyfikator_formularza jest identyfikatorem formularza wziętym z jego nazwy funkcji PHP, a nie z identyfikatora HTML (który nie jest gwarantowany spójny). Dlatego zawiera znaki podkreślenia, a nie myślniki, gdy zmieniasz formularz – Clive

+1

"z jakiegoś powodu", ponieważ kreski i podkreślenia nie są równoważnymi ciągami. Wyjścia Drupal znaczników zawierają kreski, ale wewnętrznie używają podkreśleń. Możesz znaleźć identyfikator formularza, przeglądając swoje źródło i znajdując 'input [name =" id_formularza "]' i używając tej dokładnej wartości. Spróbuj uruchomić ten fragment kodu jQuery w konsoli przeglądarki na dowolnej stronie formularza administracyjnego Drupal: 'jQuery ('input [nazwa =" id_formularza "]). Val()' –

5

Jeśli użyjesz hide(), usuniesz to pole, ale ukryj bardziej dla "opóźnienia" renderowania pola ... Tak jak to ukrywasz, ale potem (w pliku szablonu) drukujesz je w innym miejscu. Ponieważ, jeśli nie wydrukujesz go później, nie zostanie on wyrenderowany na stronie, nie zostanie zapisany, jeśli jest wymagany, pojawi się błąd sprawdzania poprawności i tak dalej.

Jeśli chcesz je ukryć, więc użytkownik nie może go zobaczyć, ale chcesz formę zachować poprzednią wartość wykorzystaniem pola coś takiego:

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

a jeśli ma to być widoczne, ale wyłączony (użytkownik nie może zmienić jego wartości), następnie:

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

Dzięki temu działa –

Powiązane problemy