Como é possível um módulo detectar quando o Drupal está exibindo a página "acesso negado"?
Eu sei como fazer isso com o Drupal 6; Eu preciso saber como fazer isso com o Drupal 7.
16
Você pode definir quais páginas serão exibidas quando ocorrerem erros 403 e 404 (administrador / configurações / relatório de erros).
Eu acho que você pode adicionar uma nova página na sua e hook_menu()
, em seguida, definir essa página como o retorno de chamada de erro 403. Quando o retorno de chamada do menu personalizado é atingido, você sabe que está exibindo a página "acesso negado"!
Eu faço isso no Boost 7.x. Não é bonito, mas faz o trabalho.
fonte
No Drupal 7, a função que retorna os cabeçalhos HTTP já definidos é drupal_get_http_header () , que requer o nome do cabeçalho HTTP como parâmetro. Olhando para authorize_access_denied_page () , e drupal_fast_404 () código deixa claro que valoriza a passar para essa função.
Quando o cabeçalho "Status" começa com 403 , o Drupal gera uma página de acesso negado.
Verifique se a ligação
drupal_get_http_header('Status')
acontece tarde. A chamada durantehook_init()
é muito cedo, mas a chamada durantehook_page_alter()
(ou qualquer gancho de pré-processo de tema) terá as informações atualizadas do cabeçalho.fonte
drupal_get_http_header('Status')
retornosNULL
.Seu módulo pode interceptar o valor "
Default 403 (access denied) page
" modificado pela página "Administer > Site configuration > Error reporting
":Em
hook_enable
, usandovariable_get
/variable_set
, copie o valor existente para uma variável secundária e substitua a variável pelo seu próprio caminho (que você registrou usandohook_menu
).altere o formulário "Relatório de erros" usando
hook_form_FORM_ID_alter
para ler / gravar na variável secundáriaSe você deseja ser completamente invisível para o usuário, o retorno de chamada da sua página pode chamar
drupal_goto( the_value_of_the_secondary_variable )
.Em
hook_disable
, restaure o valor da variável secundária.E é isso, seu módulo é notificado de maneira limpa (e invisível para o usuário) quando o "Acesso negado" é acionado.
fonte
Certamente você poderia usar a
get_headers()
função do PHP ?O primeiro elemento da matriz retornado será o código de resposta. Se ele contiver '403', o Drupal retornou uma página "acesso negado".
Não sei ao certo onde seria o melhor lugar para chamá-lo. Provavelmente
hook_exit()
, dependendo de suas necessidades:fonte
Essa é a maneira mais simples de detectar acesso negado (403) e página não encontrada (404) no Drupal 7.
fonte
Você pode usar o módulo Painéis para isso.
fonte