Em 'Mensagens de erro a serem exibidas', posso ocultar erros (conforme recomendado para sites de produção). No entanto, é possível ocultar erros para todos, exceto uma determinada função?
Em 'Mensagens de erro a serem exibidas', posso ocultar erros (conforme recomendado para sites de produção). No entanto, é possível ocultar erros para todos, exceto uma determinada função?
Respostas:
Prefácio: Esta resposta foi postada pela primeira vez como resposta a " Como suprimir um aviso ou mensagem de erro para os usuários do site? ".
Você pode usar o módulo Desativar mensagens para isso. Aqui está uma citação de sua página do projeto:
Oferece ao proprietário de um site opções para desativar mensagens específicas mostradas aos usuários finais. O sistema principal de mensagens drupal, oferecido por drupal_set_message, é uma excelente maneira de os módulos enviarem mensagens aos usuários finais. No entanto, nem todos os proprietários de sites do drupal desejam mostrar todas as mensagens enviadas pelo núcleo do drupal e todos os módulos para seus usuários. Este módulo oferece aos administradores do site uma maneira razoavelmente poderosa de filtrar as mensagens mostradas aos usuários finais.
Algumas de suas características são:
- Filtre as mensagens que correspondem exatamente a uma sequência de texto completo.
- Filtre as mensagens que correspondem a uma expressão regular.
- Permissões para ocultar especificamente todas as mensagens de um determinado tipo de qualquer função.
- Desative toda a filtragem para usuários específicos.
- Desative toda a filtragem para caminhos específicos.
- Aplique a filtragem apenas para caminhos específicos.
- Sistema de depuração para obter mensagens no HTML sem mostrá-lo aos usuários finais.
Disponível para Drupal 6, Drupal 7 ou Drupal 8.
Se você estiver usando o recurso ' expressão regular ', precisará usar uma expressão regular que "capte" a mensagem de erro que deseja interceptar, conforme explicado também na documentação da Comunidade .
Abaixo de " Dica: mantenha as coisas simples " nessa página, há uma excelente amostra, com a seguinte aparência:
Esteja ciente de que algo que parece muito simples como:
Notice: Undefined index: field_txt_student_id in ctools_entity_form_field_content_type_render() (line 96 of [...]entity_form_field.inc).
Tem muito mais caracteres invisíveis nele do que se poderia esperar:
<em class="placeholder">Notice</em>: Undefined index: field_txt_student_id in <em class="placeholder">ctools_entity_form_field_content_type_render()</em> (line <em class="placeholder">96</em> of <em class="placeholder">[...]entity_form_field.inc</em>).
Então, apenas envolva a carne do grep com uma simples expressão regular "any character": ". +" Como em:
.+Notice.+Undefined index:.+ctools_entity_form_field_content_type_render.+entity_form_field.inc.+
Portanto, a "pista" para chegar a uma mensagem correta é reduzir a mensagem de erro que você deseja capturar e colocar caracteres " . + " Quando apropriado.
Falando em encolher, observe que field_txt_student_id
também foi omitido na expressão regular (para NÃO depender do nome do campo).
Como outro exemplo, suponha que você queira capturar esta mensagem de erro:
PDOException: em dblog_watchdog () (linha 160 de /home/dbuser/public_html/yoursitesname.com/modules/dblog/dblog.module).
Nesse caso, uma possível expressão regular deve ser algo assim:
.+PDOException.+in dblog_watchdog().+(line 160 of.+/modules/dblog/dblog.module).+
Observe como eu intencionalmente não incluí parte do caminho antes /modules/dblog/dblog.module
(para que ele possa ser reutilizado em outro site onde o mesmo erro ocorre ...).
Observe também que você tem que pensar sim ou não para incluir a 160
parte dele: se o módulo mudar um pouco para que na mensagem de erro (por exemplo) fique em linha 161
, seu erro não será mais interceptado. Para evitar isso, omita a parte 160, se é o que você prefere (pessoalmente, prefiro ver o erro retornando e depois re-adaptar minha expressão regular).
Se sua expressão regular não funcionar no início (= a mensagem ainda aparece), talvez seja porque há algum erro de digitação na expressão regular. Para identificar esse erro de digitação, tente primeiro com uma expressão regular menos restritiva, mesmo que fosse apenas para tentar algo assim (para capturar TODAS as mensagens que contêm PDOException
e dblog_watchdog
):
.+PDOException.+dblog_watchdog.+
Ou mesmo assim (para pegar TODAS as mensagens que contêm PDOException
):
.+PDOException.+
Essas duas últimas expressões provavelmente suprimiriam o excesso de mensagens; portanto, você deseja reduzi-la àquela que procura.
Há também o módulo Better Messages como alternativa. No entanto, para o D7 (que é essa a questão), ele possui apenas uma versão Alfa.
Você pode verificar a função do usuário usando a função in_array (). No seu modelo:
<?php global $user; ?>
<?php if (!in_array('YOUR_ROLE', $user->roles)): ?>
<?php if ($messages): ?>
<div id="messages">
<?php print $messages; ?>
</div> </div>
<?php endif; ?>
<?php endif; ?>
Ou você pode fazê-lo em sua função de pré-processo (não tenho certeza se a variável da mensagem é chamada corretamente, mas pode lhe dar uma idéia)
function MYTHEME_preprocess_page(&$variables, $hook) {
global $user;
if (!in_array('YOUR_ROLE', $user->roles)){
// This has to be checked, could be something similar.
unset($variables['page']['content']['messages']);
}
}
Na verdade, isso não é realmente factível.
Você pode ocultar todas as mensagens para usuários ou funções, mas o principal problema está na maneira como o drupal categoriza os erros.
Um erro de formulário é o mesmo que uma exceção de banco de dados para a função de mensagens; portanto, se você ocultar erros, também ocultará as mensagens de erro de um formulário de comentário.
Eu adoraria que alguém me provasse errado, porque não consegui ocultar avisos php, mas mostrar avisos de formulário ao mesmo tempo.
Para remover o aviso de um site Drupal, siga as etapas abaixo:
None
desativará todos os relatórios de erros.Errors and warnings
será exibido nos problemas mais graves.All messages
exibirá todos os problemas e provavelmente é útil apenas para desenvolvedores.Outra maneira de desativar o aviso e a mensagem de erro através do código. Adicione o seguinte código ao settings.php
arquivo:
$conf['error_level']=0;
Você também pode configurar o Drupal para registrar apenas os erros seguindo estas instruções: vá para Administration > Configuration > Development > Logging and errors
ou vá diretamente para o caminho /admin/config/development/logging
e defina "Mensagens de erro a serem exibidas" como nenhuma . O Drupal ainda registra os erros, mas não os exibe para os usuários.
Se você precisar de mais controle, use o Disable Messages
módulo.
Você pode usar o melhor módulo de mensagem . Oferece configuração baseada em funções e / ou correspondência de expressão regular para filtrar algumas notificações.
Você pode comentar este código no seu tema
<?php if ($messages): ?>
<div id="messages"><div class="section clearfix">
<?php print $messages; ?>
</div></div> <!-- /.section, /#messages -->
<?php endif; ?>
ou elemento de tema status_messages serve isso, você pode escrever a própria função de tema no template.php
MYTHEME_status_messages(&$variables){}
Isso pode afetar apenas os erros de aviso e aviso
$messages
seção for comentada, ela também não será exibida para os administradores.