» Modifier le gestionnaire des messages d'erreurAvoir bâti son site, tout bô, tout nickel, avec gestion des utilisateurs et une belle page de news, et bing, un message d'erreur nous ramène au forum, avec enntête, lien vers l'index du forum.... c'est trés frustrant.
voici comment sont gérés les messages d'erreur:
dans common.php, vous avez cette ligne:
- Code: Tout sélectionner
set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler');
ça veut dire que sauf si la constante PHPBB_MSG_HANDLER est définie, toutes les erreurs d'exécution (notamment celles déclenchées par l'appel à triger_error() ) entraineront l'exécution de la fonction msg_handler (qui se trouve dans includes/functions.php)
Je n'ai pas la prétention de vous faire réécrire entièrement ce gestionnaire, mais juste de modifier entêtes et bas de page quand l'erreur est déclenchée par une page de votre site.
Plutôt que de modifier la fonction elle-même, il est préférable d'en faire une copie que nous pourrons alors modifier à volonté.
ouvrez includes/functions.php et cherchez
- Code: Tout sélectionner
function msg_handler($errno, $msg_text, $errfile, $errline)
copier le code à partir de cette ligne, jusqu'à, (compris)
- Code: Tout sélectionner
// If we notice an error not handled here we pass this back to PHP by returning false
// This may not work for all php versions
return false;
}
et collez-le dans le même fichier juste avant ?> (ou collez-le dans un fichier personnel, à condition qu'il soit inclus dans chacune de vos page ayant lancé une session phpbb.
dans le code que vous avez collé (pas dans le code d'origine, hé ?)
remplacez
- Code: Tout sélectionner
function msg_handler($errno, $msg_text, $errfile, $errline)
par
- Code: Tout sélectionner
function mon_msg_handler($errno, $msg_text, $errfile, $errline)
le code sur lequel nous aurons à travailler est celui-ci:
- Code: Tout sélectionner
if (!defined('HEADER_INC'))
{
if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin'])
{
adm_page_header($msg_title);
}
else
{
page_header($msg_title);
}
}
$template->set_filenames(array(
'body' => 'message_body.html')
);
$template->assign_vars(array(
'MESSAGE_TITLE' => $msg_title,
'MESSAGE_TEXT' => $msg_text,
'S_USER_WARNING' => ($errno == E_USER_WARNING) ? true : false,
'S_USER_NOTICE' => ($errno == E_USER_NOTICE) ? true : false)
);
// We do not want the cron script to be called on error messages
define('IN_CRON', true);
if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin'])
{
adm_page_footer();
}
else
{
page_footer();
}
nous supposerons que votre entête personnel est appelé dans vos pages par
- Code: Tout sélectionner
include('header.php');
et le bas de page par
- Code: Tout sélectionner
include('footer.php');
si vos entêtes et bas de page sont affichés différemment, il vous faudra rectifier le code en conséquence
- remplacez
- Code: Tout sélectionner
if (!defined('HEADER_INC'))
{
if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin'])
{
adm_page_header($msg_title);
}
else
{
page_header($msg_title);
}
}
par- Code: Tout sélectionner
if (!defined('HEADER_INC'))
{
include('header.php');
}
et- Code: Tout sélectionner
if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin'])
{
adm_page_footer();
}
else
{
page_footer();
}
par- Code: Tout sélectionner
include('footer.php');
- ce code:
- Code: Tout sélectionner
$template->set_filenames(array(
'body' => 'message_body.html')
);
$template->assign_vars(array(
'MESSAGE_TITLE' => $msg_title,
'MESSAGE_TEXT' => $msg_text,
'S_USER_WARNING' => ($errno == E_USER_WARNING) ? true : false,
'S_USER_NOTICE' => ($errno == E_USER_NOTICE) ? true : false)
);
doit être laissé tel quel, si vous utilisez les templates dans toutes vos pages, mais ça suppose que vous mettiez- Code: Tout sélectionner
$template->display('body');
dans votre footer.php.
si vous n'utilsez pas les templates, alors remplacez ce code par- Code: Tout sélectionner
echo "<h2>$msg_title</h2>
<p>$msg_text</p>";
- Voilà, votre gestionnaire d'erreur est terminé, il vous reste à le rendre opérationnel:
- d'abord placez dans votre header.php
- Code: Tout sélectionner
define('HEADER_INC, true);
ça évitera que le gestionnaire d'erreurs n'affiche une 2e fois l'entête si celui-ci est déjà affiché quand survient l'erreur
- et enfin placez dans toutes les pages de votre site lançant une session phpBB:
- Code: Tout sélectionner
define('PHPBB_MSG_HANDLER', 'mon_msg_handler');
et ceci juste après- Code: Tout sélectionner
define('IN_PHPBB', true);
ou tout au moins AVANT- Code: Tout sélectionner
include($phpbb_root_path . 'common.' . $phpEx);