简单介绍一下两者的原理:
1.群组推送
在群组管理中,对群组中的帖子管理员可以进行推送到版块的操作。
推送后会在相应的版块看到所推送的帖子
主题的tid与在群组中主题的tid相同。
这与关联的群组中显示的帖子有区别吗?答案当然是有!
我们来看看群组推送都执行了什么操作:
推送的几步重要操作在topicadmin_moderate.php的567行附近:
- DB::query("INSERT INTO ".DB::table('forum_thread')." (fid, readperm, author, authorid, subject, dateline, lastpost, lastposter, views, replies, displayorder, digest, closed, special, attachment, isgroup)
- VALUES ('$moveto', '$thread[readperm]', '".addslashes($thread['author'])."', '$thread[authorid]', '".addslashes($thread['subject'])."', '$thread[dateline]', '".TIMESTAMP."', '".addslashes($thread['lastposter'])."', '$thread[views]', '$thread[replies]', '0', '$thread[digest]', '$thread[tid]', '$thread[special]', '$thread[attachment]', '$thread[isgroup]')");
复制代码 上面的代码将群组的主题数据添加(可以说是复制一份)到forum_thread表里,注意仅仅是插入到forum_thread表里,并没有在forum_post表里有数据。这意味着什么呢,意味着实际这个主题是不存在的。
- $newtid = DB::insert_id();
- DB::query("UPDATE ".DB::table('forum_thread')." SET closed='$newtid' WHERE tid='$thread[tid]'");
复制代码 特别留意一下这两步操作,取插入数据的id,将插入的id更新到原群组主题的数据的closed字段中,这时候明白closed字段的含义了吗?是的,就是表示该主题绑定的主题的id(之前添加的主题的closed字段也做了对应的更新)。
在forumdisplay_list.htm模板里被推送的数据是这样操作的:
- <!--{if $thread['related_group'] == 0 && $thread['closed'] > 1}-->
- <!--{eval $thread[tid]=$thread[closed];}-->
- <!--{/if}-->
复制代码 用推送的主题的实际tid替代显示的tid。
这里有一点需要注意,因为这个列表页显示的主题并不会随原主题信息的改变而改变,而是保持推荐时的状态不会改变,除了群组里的原主题被删除。
2.关联版块
关联版块的功能比较简单,首先在后台--论坛--版块--选定一个版块--扩展设置中设置所要关联的版块
提交后数据会保存到forum_forumfield表中的relategroup字段中。
在读取主题列表forum_forumdisplay.php中读取的当前版块所关联的版块\群组的代码如下:
- if($_G['forum']['relatedgroup']) {
- $relatedgroup = explode(',', $_G['forum']['relatedgroup']);
- $relatedgroup[] = $_G['fid'];
- $fidsql = " t.fid IN(".dimplode($relatedgroup).")";
- }
复制代码 在主题列表页就可以显示所有关联的版块的主题了(显示,但不可修改)。
这两者都可以在版块的主题列表页显示群组的主题,但有所区别,推送会创建一个空主题并将其与原主题绑定,而关联版块是直接取其关联版块的数据。因此,推送的主题数据在列表页不会直接更新,而关联版块的主题数据会随着所关联的版块内数据的变化而变化。
特别注意一下,如果同时关联版块并推送某一主题,则在列表页会出现相同的主题,而如果有一个版块关联该版块,会显示从群组推送过来的数据。
例如:群组:主题1(推送到版块1)
版块1(关联群组):主题1(关联主题,不可修改),主题1(推送主题,可删除)
版块2(关联版块1):主题1(关联主题,关联的是版块1的推送主题,不可修改)
|