Comment puis-je détecter si la page actuellement consultée est administrative?

18

Comment puis-je détecter si l'utilisateur que la page consulte actuellement est considéré comme administratif? Une page administrative peut être reconnue lorsque le thème d'administration est activé.

Dans mon cas, je voudrais imprimer un avis si cette condition est remplie et si l'utilisateur peut «administrer les modules».

Daniel
la source

Réponses:

30

Cela peut être fait avec path_is_admin(current_path()).

Par exemple, l'implémentation de hook suivante peut être utilisée.

function mymodule_init() {
  if (user_access('administer modules') && path_is_admin(current_path())) {
      drupal_set_message(t('Message'));
  }
}
Daniel
la source
1
La réponse dépend de la définition du PO du terme «administratif», et cette définition peut avoir changé depuis la première publication de la question. Certains considèrent les pages d'édition de contenu comme des pages "admin", mais path_is_admin () renvoie false pour une page comme node / 123 / edit. En attendant, cette page peut ou non utiliser le thème administrateur. Toute page peut potentiellement utiliser le thème administrateur, et toute page peut potentiellement ne pas utiliser le thème administrateur. La définition actuelle dans l'OP est "Une page administrative peut être reconnue lorsque le thème d'administration est activé."
arnoldbird
9

La réponse de Daniel est correcte pour déterminer si le chemin actuel est "administratif", mais si vous voulez vérifier plus directement si le thème d'administration est utilisé (votre question semble un peu vague quant à ce que vous recherchez), vous pouvez le faire …

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

… Bien que cela risque d'échouer si vous essayez de l'exécuter trop tôt dans le processus d'amorçage, à savoir avant $themeest défini.

Garrett Albright
la source
OP clarifié afin qu'il ne soit pas dirigé vers la recherche d'un thème administrateur. Le thème d'administration est simplement une indication d'un chemin administratif.
Daniel
J'étais encore confus, jusqu'à ce que je voie que c'est une de ces choses où vous avez posté une question et y avez répondu vous-même. Derp, je comprends maintenant.
Garrett Albright du
2

Pour ceux qui recherchent la méthode Drupal 8:

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

(Testé avec une fonction de prétraitement en 8.7.5 et utilisé dans un core-patch en 8.0)

William Turrell
la source
0

Pour vérifier si le thème d'administration est utilisé (pour Drupal 8), vous pouvez utiliser

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

pour obtenir le nom du thème.

kbrinner
la source