¿Cómo puedo detectar si la página vista actual es administrativa?

18

¿Cómo detecto si el usuario que la página está viendo actualmente se considera administrativo? Se puede reconocer una página administrativa cuando se activa el tema de administración.

En mi caso, me gustaría imprimir un aviso si se cumple esta condición y si el usuario puede "administrar módulos".

Daniel
fuente

Respuestas:

30

Esto se puede hacer con path_is_admin(current_path()).

Por ejemplo, se puede usar la siguiente implementación de enlace.

function mymodule_init() {
  if (user_access('administer modules') && path_is_admin(current_path())) {
      drupal_set_message(t('Message'));
  }
}
Daniel
fuente
1
La respuesta depende de cuál sea la definición de OP de "administrativo", y esta definición puede haber cambiado desde que se publicó la pregunta por primera vez. Algunos consideran que las páginas de edición de contenido son páginas "administrativas", pero path_is_admin () devolverá false para una página como node / 123 / edit. Mientras tanto, esta página puede o no usar el tema de administrador. Cualquier página podría usar el tema de administrador, y cualquier página podría no usar el tema de administrador. La definición actual en el OP es "Se puede reconocer una página administrativa cuando se activa el tema de administración".
arnoldbird
9

La respuesta de Daniel es correcta para determinar si la ruta actual es "administrativa", pero si desea verificar más directamente si se está utilizando el tema de administración (su pregunta parece un poco vaga en cuanto a lo que está buscando), puede hacerlo ...

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

... aunque es probable que esto falle si intenta ejecutarlo demasiado pronto en el proceso de arranque, es decir, antes de que $themese defina.

Garrett Albright
fuente
OP clarificado, por lo que no está dirigido a buscar un tema de administrador. Más bien, el tema de administración es simplemente una indicación de una ruta administrativa.
Daniel
Todavía estaba confundido, hasta que vi que esta es una de esas cosas en las que publicaste una pregunta y luego la respondiste tú mismo. Derp, lo entiendo ahora.
Garrett Albright
2

Para aquellos que buscan el método Drupal 8:

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

(Probado con una función de preproceso en 8.7.5 y utilizado en un parche central en 8.0)

William Turrell
fuente
0

Para verificar si se está utilizando el tema de administración (para Drupal 8) puede usar

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

para obtener el nombre del tema.

kbrinner
fuente