Como posso detectar se a página visualizada atualmente é administrativa?

18

Como detecto se o usuário que a página está visualizando no momento é considerado administrativo? Uma página administrativa pode ser reconhecida quando o tema de administração é ativado.

No meu caso, eu gostaria de imprimir um aviso se essa condição for atendida e se o usuário puder 'administrar módulos'.

Daniel
fonte

Respostas:

30

Isso pode ser feito com path_is_admin(current_path()).

Por exemplo, a seguinte implementação de gancho pode ser usada.

function mymodule_init() {
  if (user_access('administer modules') && path_is_admin(current_path())) {
      drupal_set_message(t('Message'));
  }
}
Daniel
fonte
11
A resposta depende de qual é a definição de "administrativo" do OP e essa definição pode ter sido alterada desde que a pergunta foi publicada pela primeira vez. Alguns consideram as páginas de edição de conteúdo como "admin", mas path_is_admin () retornará false para uma página como node / 123 / edit. Enquanto isso, esta página pode ou não usar o tema administrador. Qualquer página pode potencialmente usar o tema de administrador e qualquer página pode não usar o tema de administrador. A definição atual no OP é "Uma página administrativa pode ser reconhecida quando o tema de administração é ativado".
precisa saber é o seguinte
9

A resposta de Daniel está correta para determinar se o caminho atual é "administrativo", mas se você quiser verificar mais diretamente se o tema de administração está sendo usado (sua pergunta parece um pouco vaga quanto ao que você está procurando), você pode ...

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

... embora seja provável que isso falhe se você tentar executá-lo muito cedo no processo de inicialização, ou seja, antes da $themedefinição.

Garrett Albright
fonte
OP esclarecido para que não seja direcionado à procura do tema de administrador. Em vez disso, o tema admin é simplesmente uma indicação de um caminho administrativo.
Daniel
Eu ainda estava confuso, até ver que essa é uma daquelas coisas em que você postou uma pergunta e depois a respondeu. Derp, entendi agora.
Garrett Albright
2

Para quem procura o método Drupal 8:

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

(Testado com uma função de pré-processo na 8.7.5 e usado em uma correção de núcleo na 8.0)

William Turrell
fonte
0

Para verificar se o tema de administração está sendo usado (no Drupal 8), você pode usar

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

para obter o nome do tema.

kbrinner
fonte