Jak mogę sprawdzić, czy bieżąca strona jest administracyjna?

18

Jak wykryć, czy użytkownik, który aktualnie przegląda stronę, jest uważany za administratora? Stronę administracyjną można rozpoznać po aktywowaniu motywu administracyjnego.

W moim przypadku chciałbym wydrukować zawiadomienie, jeśli warunek ten jest spełniony, a użytkownik może „administrować modułami”.

Daniel
źródło

Odpowiedzi:

30

Można to zrobić za pomocą path_is_admin(current_path()).

Na przykład można zastosować następującą implementację haka.

function mymodule_init() {
  if (user_access('administer modules') && path_is_admin(current_path())) {
      drupal_set_message(t('Message'));
  }
}
Daniel
źródło
1
Odpowiedź zależy od tego, czym jest definicja „administracyjna” PO, a definicja ta mogła ulec zmianie od pierwszego opublikowania pytania. Niektórzy uważają strony do edycji treści za strony „admin”, ale path_is_admin () zwróci false dla strony takiej jak node / 123 / edit. Tymczasem ta strona może, ale nie musi używać motywu administratora. Każda strona może potencjalnie używać motywu administratora, a każda strona może potencjalnie nie używać motywu administratora. Obecna definicja w PO to „Strona administracyjna może zostać rozpoznana po aktywacji motywu administracyjnego”.
arnoldbird
9

Odpowiedź Daniela jest poprawna dla określenia, czy bieżąca ścieżka jest „administracyjna”, ale jeśli chcesz bardziej bezpośrednio sprawdzić, czy używany jest motyw administracyjny (twoje pytanie wydaje się nieco niejasne, którego szukasz), możesz to zrobić …

global $theme;
if ($theme === variable_get('admin_theme', 'seven')) {
  // …
}

… Chociaż może się to nie powieść, jeśli spróbujesz uruchomić go zbyt wcześnie w procesie ładowania początkowego, a mianowicie przed $themezdefiniowaniem.

Garrett Albright
źródło
Wyjaśnione OP, więc nie jest ukierunkowane na szukanie motywu administratora. Motyw administratora jest po prostu wskazaniem ścieżki administracyjnej.
Daniel
Wciąż byłem zdezorientowany, dopóki nie zobaczyłem, że jest to jedna z tych rzeczy, w których zadałeś pytanie, a potem sam na nie odpowiedziałeś. Derp, rozumiem teraz.
Garrett Albright
2

Dla tych, którzy szukają metody Drupal 8:

if (\Drupal::service('router.admin_context')->isAdminRoute()) {
  // …
}

(Testowany z funkcją wstępnego przetwarzania w wersji 8.7.5 i używany w patch-core w wersji 8.0)

William Turrell
źródło
0

Aby sprawdzić, czy używany jest motyw administracyjny (dla Drupal 8), możesz użyć

$theme_name = \Drupal::service('theme.manager')->getActiveTheme()->getName();

aby uzyskać nazwę motywu.

kbrinner
źródło