Jak ukryć niestandardowe pole użytkownika w profilu użytkownika?

20

W Drupal 7, jaki jest najlepszy sposób, aby uniemożliwić użytkownikom niebędącym administratorami zmianę pola niestandardowego profilu użytkownika?

Przypadek użycia: Utworzyłem pole użytkownika o nazwie „Identyfikator klienta”, którego nie chcę, aby użytkownik (którykolwiek z moich rzeczywistych klientów) zmienił. Pole istnieje dla mojego własnego odniesienia i do programowania w innych modułach. Nie mam nic przeciwko temu, aby użytkownik zobaczył identyfikator klienta, ale nie powinien mieć możliwości jego edycji.

Czy powinienem zastąpić szablon strony dla strony profilu użytkownika? Jeśli tak, w jaki sposób szablon jest zmieniany, aby pole było tylko do odczytu lub niewidoczne?

Bardzo ci dziękuje za pomoc!

Chris

ctlarsen
źródło

Odpowiedzi:

17

Myślę, że uprawnienia Field są tym, czego szukasz. Oto cytat na ten temat (ze strony projektu modułu):

... pozwala administratorom witryn na ustawianie uprawnień na poziomie pola do edycji, przeglądania i tworzenia pól w dowolnej jednostce.

Funkcje :

  • Włącz uprawnienia do pól dla dowolnej jednostki, nie tylko węzłów.
  • Uprawnienia do pól oparte na rolach, pozwalające na różne wzorce wyświetlania w zależności od dostępu użytkownika.
  • Uprawnienia na poziomie autora umożliwiają przeglądanie i edycję pól w zależności od tego, kim jest właściciel jednostki.
  • Uprawnienia dla każdego pola nie są domyślnie włączone. Zamiast tego administratorzy mogą jawnie włączyć te uprawnienia dla pól, w których ta funkcja jest potrzebna.
  • Przegląd uprawnień w terenie
pasine
źródło
Dzięki, nie! Zainstalowałem moduł Uprawnienia do pól (wersja alfa jest najnowsza, co mnie trochę denerwuje, ale cokolwiek) i ukrywa pole przed użytkownikiem, gdy użytkownik przegląda swój profil. Po eksperymentowaniu ze wszystkimi ustawieniami modułu wydaje się, że nie ma sposobu, aby pole było widoczne, ale tylko do odczytu. Nie jest to absolutny wymóg, ale byłoby miło mieć.
ctlarsen
Ustawienie pola jako widocznego oznacza, że ​​pole tekstowe jest wyświetlane jako zwykły tekst. Jeśli chcesz zachować pole tekstowe i ustawić je jako tylko do odczytu, myślę, że musisz użyć hook_form_alter na formularzu.
pasine
Jeszcze raz dziękuję, nie. Przejdę trasę hook_form_alter i zobaczę, gdzie mnie to zaprowadzi. Wygląda na to, że to najlepsza droga.
ctlarsen
Moduł Field Permissionsdziała dobrze z Drupalem 8, ale myślę, że można ukryć tylko pola niestandardowe (musiałem także podać nazwę użytkownika)
Sébastien Gicquel
5

Aby ukryć pole przed formularzem profilu użytkownika, możesz ustawić #accesswłaściwość pola na FAŁSZ za pomocą hook_form_FORMID_alter.

Poniższy fragment field_organisationkodu ukrywa pole w formularzu profilu użytkownika dla osób niebędących administratorami:

function YOURCUSTOMMODULE_form_user_profile_form_alter(&$form, &$form_state, $form_id) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    $form['field_organisation']['#access'] = FALSE;
  }
}

Zobacz także podobne pytanie dotyczące drupalanswers

Możesz także ukryć pole na stronie profilu użytkownika (nie formularz), używając profilu szablon_preprocess_użytkownika_użytkownika

Poniższy fragment field_organisationkodu ukrywa pole na stronie użytkownika dla osób niebędących administratorami:

function YOURCUSTOMMODULE_preprocess_user_profile(&$vars) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    unset($vars['user_profile']['field_organisation']);
  }
}
batigolix
źródło
1

Wygląda na to, że istnieje moduł o nazwie http://drupal.org/project/user_readonly "Moduł pozwala administratorowi zapobiegać modyfikowaniu pól konta / profilu użytkownika. Administrator może wybrać, które pola zostaną niedozwolone, a które pola będą dozwolony."

Jayesh Jose
źródło