J'avais fait quelque chose de similaire pour créer un "block edito" pour smartsection.
Le principe est d'utilisé les class et fonctions de xoops et les class, fonctions et blocks du module et de leurs paramétrages (sans qu'ils soient activés dans l'admin).
Avant tout il faut repérer dans le fichier xoops_version les "id" des blocks à afficher
(en rouge dans l'exemple)
$modversion['blocks'][b][color=CC0000][1][/color][/b]['file'] = "wfdownloads_top.php";
$modversion['blocks'][b][color=CC0000][2][/color][/b]['file'] = "wfdownloads_top.php";
Voici le code pour
wfdownloads
// Acquisition des contenus des blocks
include_once XOOPS_ROOT_PATH . "/class/xoopsmodule.php";
include_once XOOPS_ROOT_PATH . "/class/xoopsblock.php";
include_once XOOPS_ROOT_PATH . "/class/template.php";
global $xoopsDB;
$xoopsModule =& XoopsModule::getByDirname("[b][color=009900]wfdownloads[/color][/b]", false);
$moduleid = $xoopsModule->getVar('mid');
$xoopsTpl = new XoopsTpl();
$sql = "SELECT bid FROM " . $xoopsDB->prefix("newblocks") . " WHERE mid=" . $moduleid . " and func_num in [b][color=CC0000](1,2)[/color][/b]";
$res = $xoopsDB->query($sql);
while ( list($bid) = $xoopsDB->fetchRow($res) ) {
$xoopsblock = new XoopsBlock( $bid );
$btpl = $xoopsblock->getVar('template') != '' ? $xoopsblock->getVar('template') : "system_block_dummy.html";
$bresult =& $xoopsblock->buildBlock();
if ( !$bresult) {
continue;
}
$xoopsTpl->assign_by_ref('block', $bresult);
$bcontent =& $xoopsTpl->fetch('db:'.$btpl, 'blk_'.$xoopsblock->getVar('bid'));
$blocks[$bid]['title'] = $xoopsblock->getVar('title');
$blocks[$bid]['content'] = $bcontent;
}
// Affichage du contenu des blocks
foreach ($blocks as $block) {
echo '<div style="font-weight:bold; font-size: 10px; text-align: left;">' . $block['title'] . '</div>';
echo '<div style="margin-bottom: 10px;">' . $block['content'] . '</div>';
}