注意:非PHP开发者, 没用过Xoops请不用浪费时间。 烦透了XOOPS的那个XoopsTpl,每次不论什么页面都会自动加上头和尾以及其他block。比如我用Iframe包含了另一个页,另一个页也出来一个头,那就有两个头了,巨难看。不用吧,有一些变量比如xoopsUser什么的都需要我一个一个去assign,很麻烦。 今天做了一个hack,就可以让指定页不包含头了.原理很简单,在smarty模板中加一个变量,当这个变量为no时,那些xoops自动产生的block才会显示出来。如果在url中加上?ajax=yes,系统就不显示这些xoops自动产生的区块,只显示由$xoopsOption[“template_main”]模板产生的内容。 首先,把theme.html文件中 <{$xoops_contents}>标签前和标签后的内容都用 <{ if $xoops__notajax == “no” }>和<{/if}>包含起来。 完成后的theme.html应是这样的样式: <{ if $xoops__notajax == “no” }> 这里是一些HTML代码 <{/if}> <{$xoops_contents}> <{ if $xoops__notajax == “no” }> 这里是一些HTML代码 <{/if}> 但是我们还需要在header文件中加一段: assign_by_ref( ‘xoops__notajax’,$xoops__notajax); ?> 我用了文明猪的一个hack,我的完成后是这样的: $xoopsTpl->assign_by_ref( ‘xoBlocks’, $aggreg->blocks ); if($_GET[“ajax”]==”yes”) { $xoops__notajax=”yes”; } else $xoops__notajax=”no”; $xoopsTpl->assign_by_ref( ‘xoops__notajax’,$xoops__notajax); // Backward compatibility code for pre 2.0.14 themes $xoopsTpl->assign_by_ref( ‘xoops_lblocks’, $aggreg->blocks[‘canvas_left’] ); $xoopsTpl->assign_by_ref( ‘xoops_rblocks’, $aggreg->blocks[‘canvas_right’] ); $xoopsTpl->assign_by_ref( ‘xoops_ccblocks’, $aggreg->blocks[‘page_topcenter’] ); $xoopsTpl->assign_by_ref( ‘xoops_clblocks’, $aggreg->blocks[‘page_topleft’] ); $xoopsTpl->assign_by_ref( ‘xoops_crblocks’, $aggreg->blocks[‘page_topright’] ); $xoopsTpl->assign( ‘xoops_showlblock’, !empty($aggreg->blocks[‘canvas_left’]) ); $xoopsTpl->assign( ‘xoops_showrblock’, !empty($aggreg->blocks[‘canvas_right’]) ); 您看一看,我是把代码加在了header.php文件的有$xoopsTpl->assign语句的附近。