Salut,
Je connais ce souci pour l'avoir rencontré il y a quelques années.
Le problème c'est que l'on défini des emplacements de blocs pour un module précis et complet (à savoir sur la page des articles et des catégories dans ton cas).
A l'époque, au lancement d'un site, j'avais créé un bloc qui donnait quelques indications sur le fonctionnement du-dit site, et je ne voulais voir ce bloc, que sur la page d'accueil, et pas ailleurs.
Mais ce n'était pas possible, et lorsqu'on voulait regarder les articles par catégories, ou lire un article précis, ce bloc venait toujours polluer le haut de ma page .
Voici comment j'avais procédé à l'époque :
Je créé un fichier nommé my_function.php que je place au même niveau que mon theme.html
Ce fichier contient le code suivant :
<?php
if ($_SERVER['REQUEST_URI'] == "/modules/news/")
{
$this->assign('accueilok', '1');
}
?>
Ensuite, dans mon theme.html, juste sous la balise BODY, j'ajoute cette ligne :
<{include_php file="$xoops_rootpath/themes/mon_thème/my_functions.php"}>
Je créé ensuite un bloc personnalisé que je place en haut au centre de la page.
Et dans mon thème (là ça va dépendre du thème), il faut utiliser cette condition pour afficher ou non ce bloc.
<{if $accueilok == "1"}>
ici j'affiche le bloc car on est sur la page d'accueil
<{/if}>
Sur un vieux thème de xoops, ça me donnait ça
<{foreach item=block from=$xoops_ccblocks}>
<{if $accueilok == "1"}>
<{include file="default/theme_blockcenter_c.html"}>
<{/if}>
<{/foreach}>
Ainsi, le bloc ne s'affiche que si je suis sur la page précise :
http://www.monsite.fr/modules/news/Dès que je passe sur une autre page, ce bloc disparaît.
Des liens comme ceux-ci :
http://www.monsite.fr/modules/news/index.phphttp://www.monsite.fr/modules/news/index.php?storytopic=74Bien entendu, c'est une bidouille de base, qui convenait pour ce que je faisais, et parce que je n'avais qu'un seul bloc central-centré.
Car dans ce cas de figure, avec ce changement sur le thème, je ne pourrais pas avoir de bloc en haut des autres modules.
Mais il suffirait de rajouter des conditions (sur le nom du bloc par exemple), pour contourner ce petit souci

En espérant avoir été clair, je te laisse éventuellement tester !
Conserve bien une copie nickelle des fichiers que tu vas modifier.
Edit : j'utilise un peu le même système, mais pour la messagerie.
J'ai une variable qui me permet de savoir si je suis sur une page liée à la messagerie ou pas
if (eregi('viewpmsg',$_SERVER['SCRIPT_NAME']) || eregi('readpmsg',$_SERVER['SCRIPT_NAME']))
{
$this->assign('messagerie', '1');
}
C'était juste pour te montrer une autre approche qui permet de savoir sur quelle page on est (on pourrait ainsi contrôler plus finement la page en cours du module news).