按照惯例先来解读一下逻辑。 主题内容页所涉及到的模板文件为:viewthread.htm。通过分析,我们发现 viewthread.htm 只是主题内容页的一个整体框架。 因为主题内容和回复内容的结构框架一样,所以当布局到内容(包括主题和回复)的时候。便用了 ```html <!--{loop $postlist $post}--> <!--{if $rushreply && $_GET['checkrush'] && $post['rewardfloor'] != 1}--> <!--{eval continue;}--> <!--{/if}--> <div id="post_$post[pid]" {if $_G['blockedpids'] && $post['inblacklist']}style="display:none;"{/if}> <!--{subtemplate forum/viewthread_node}--> </div> <!--{eval $postcount++;}--> <!--{/loop}--> ``` 所以接下来,我们只需要分析 viewthread_node.htm 即可。 viewthread_node.htm 就是无数个显示在主题内容页的楼层(1楼、2楼、3楼、4楼,用的都是这一个模板)。 这里我们暂时管它叫做table框架。(因为这里主要的就是一个 `<table>` 结构) 既然我们要做主题部分和回复部分的脱离,那我们只需要针对 viewthread_node.htm 这个模板做一个判断即可。 逻辑是这样的,首先在 viewthread_node.htm 的 ```html <table id="pid$post[pid]" class="plhin" summary="pid$post[pid]" cellspacing="0" cellpadding="0"> ``` 标签之上做一个判断 ```html <!--{if $post['first']}--> ``` 来判断以下内容是楼主。其次在`</table>`的下面继续判断 ```html <!--{else}--> 在这里,再把table框架复制一份放在这里 <!--{/if}--> ``` 这样,就实现了主题内容和回复内容脱离的目的。需要注意的是,在else下面放入的是将被无限循环的回复内容。也就是说我们可以任意修改这里的框架结构来实现于主题内容不一样的效果。