Ce n'est pas la bonne version du viewforum.php que tu as copié/collé ici.
Dans newbb 2.01 (celle qui est installée sur ton site), la ligne 87 est:
$xoopsTpl->assign("forum_id", $forum->getVar('forum_id'));
Le code signifie qu'à ce niveau là du script, pour une raison ou pour une autre, l'objet $forum n'est plus un objet.
Comme l'objet est utilisé un peu plus haut (ligne 77 et ligne 80) sans aucun message d'erreur, cela veut dire que l'objet est "détruit" ou "délinéarisé" quelque part entre la ligne 80 et la ligne 87.
/ cookie should be handled before calling XOOPS_ROOT_PATH."/header.php", otherwise it won't work for cache
$forum_lastview = newbb_getcookie('LF',true);
$forum_lastview[$forum->getVar('forum_id')] = time();
newbb_setcookie("LF", $forum_lastview);
$xoops_pagetitle = $xoopsModule->getVar('name'). ' - ' .$forum->getVar('forum_name');
$xoopsOption['template_main'] = 'newbb_viewforum.html';
include XOOPS_ROOT_PATH."/header.php";
$xoopsTpl->assign('xoops_module_header', $newbb_module_header);
$xoopsTpl->assign('xoops_pagetitle', $xoops_pagetitle);
$xoopsTpl->assign("forum_id", $forum->getVar('forum_id'));
Entre la ligne 80 et la ligne 87, le seul évènement notable, c'est l'include de header.php.
Il te suffit donc de sauvegarder l'objet juste avant et de le restaurer juste après l'include.
Par exemple comme ceci:
$sav_forum = serialize($forum); //sauvegarde objet $forum
include XOOPS_ROOT_PATH."/header.php";
$forum = unserialize($sav_forum); //restauration objet $forum
Et le tour est joué. Bon, d'accord, ça n'explique pas vraiment la cause du problème, mais ça le contourne efficacement