Wie kann ich feststellen, ob es sich bei der aktuell angezeigten Seite um eine Verwaltungsseite handelt?

18

Wie erkenne ich, ob der Benutzer, den die Seite gerade anzeigt, als Administrator eingestuft wird? Eine Verwaltungsseite kann erkannt werden, wenn das Verwaltungsdesign aktiviert ist.

In meinem Fall möchte ich einen Hinweis ausdrucken, wenn diese Bedingung erfüllt ist und der Benutzer Module verwalten kann.

Daniel
quelle

Antworten:

30

Dies kann mit erfolgen path_is_admin(current_path()).

Beispielsweise kann die folgende Hook-Implementierung verwendet werden.

function mymodule_init() {
  if (user_access('administer modules') && path_is_admin(current_path())) {
      drupal_set_message(t('Message'));
  }
}
Daniel
quelle
1
Die Antwort hängt von der Definition des OP für "administrativ" ab, und diese Definition hat sich möglicherweise geändert, seit die Frage zum ersten Mal gestellt wurde. Einige betrachten Inhaltsbearbeitungsseiten als "Administrationsseiten", aber path_is_admin () gibt für eine Seite wie node / 123 / edit den Wert false zurück. In der Zwischenzeit kann diese Seite das Admin-Design verwenden oder nicht. Auf jeder Seite wird möglicherweise das Admin-Design verwendet, und auf jeder Seite wird möglicherweise das Admin-Design nicht verwendet. Die aktuelle Definition im OP lautet "Eine Verwaltungsseite kann erkannt werden, wenn das Verwaltungsthema aktiviert ist."
Arnoldbird
9

Daniels Antwort ist korrekt, um festzustellen, ob der aktuelle Pfad "administrativ" ist. Wenn Sie jedoch direkter prüfen möchten, ob das Verwaltungsthema verwendet wird (Ihre Frage scheint etwas vage zu sein, wonach Sie suchen), können Sie dies tun …

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

... obwohl dies wahrscheinlich fehlschlägt, wenn Sie versuchen, es zu früh im Bootstrap-Prozess auszuführen, und zwar bevor $themedefiniert ist.

Garrett Albright
quelle
OP geklärt, so dass es nicht auf die Suche nach Admin-Thema gerichtet ist. Das Admin-Thema ist lediglich ein Hinweis auf einen Administrationspfad.
Daniel
Ich war immer noch verwirrt, bis ich sah, dass dies eines der Dinge ist, bei denen Sie eine Frage gestellt und diese dann selbst beantwortet haben. Derp, ich verstehe es jetzt.
Garrett Albright
2

Für diejenigen, die nach der Drupal 8-Methode suchen:

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

(Getestet mit einer Preprocess-Funktion in 8.7.5 und verwendet in einem Core-Patch in 8.0)

William Turrell
quelle