默认Discuz X3.1 发帖按钮的作用就是简单地在当前版块发表新主题!自己搭建的Discuz 站点,划分了一定量的主题分类及分类信息,而在使用论坛的使用过程中,会遇到这样的场景: 进入A 版块,选中A 版块的A-a 主题分类来浏览该主题分类下的所有帖子。然后点击发帖按钮发布新主题。结果在发帖的时候,默认不会选择主题分类,必须再一次执行选择主题分类的操作! 这个给我的感觉就是累,像我这样“低智商”的用户,更喜欢”傻瓜式“的类似”所见即所得“的操作方式,而不是”再一次“执行旧动作。 好了,既然如此,那就弄个判断,给Discuz 的发帖按钮添加上当前主题分类或分类信息的id,让发帖按钮触发的发帖链接带上主题分类或分类信息! 涉及的模板文件:

  1. template/default/forum/forumdisplay.htm (版块主题列表页)
  2. template/default/forum/forumdisplay_list.htm (版块主题列表页)
  3. template/default/forum/viewthread.htm (帖子内容页)

forumdisplay.htm 及forumdisplay_list.htm 这两个文件的修改方法是一样的。 找到发帖按钮所在的位置:

{lang send_posts}

在 forum.php?mod=post&action=newthread&fid=$_G[fid] 后面添加上主题分类及分类信息的判断及输出:

{if ($_G[‘forum’][‘threadtypes’] && $_G[‘forum’][‘threadtypes’][‘listable’]) || count($_G[‘forum’][‘threadsorts’][‘types’]) > 0}{if $_GET[‘typeid’] != 0}&filter=typeid&typeid={$_GET[‘typeid’]}{/if}{if $_GET[‘sortid’] != 0}&sortid=$_GET[‘sortid’]{/if}{/if}

最后变成:

{lang send_posts}

forumdisplay.htm 里还有个通过发帖按钮触发的onmouseover 事件,触发的事件就是发帖按钮下面的ul 列表,其中第一个li 默认是:

这里也总要加上吧:

{if $_GET[‘typeid’] != 0}&filter=typeid&typeid=$_GET[‘typeid’]{/if}{if $_GET[‘sortid’] != 0}&sortid=$_GET[‘sortid’]{/if}

最后是这样子的:

至此,Discuz 主题列表页的修改已经完成。然后,还需调整的地方就剩下帖子内容页viewthread.htm 里面的发帖链接了。


与主题列表页基本一致的发帖按钮(链接):

{lang send_posts}

但对应的变量不同了,所以按照主题列表页的方法会出错,需要加入的判断为:

{if $_G[‘forum_thread’][‘typeid’] && $_G[‘forum’][‘threadtypes’][‘types’][$_G[‘forum_thread’][‘typeid’]] && $_G[forum_thread][typeid] != 0}&filter=typeid&typeid=$_G[forum_thread][typeid]{/if}{if $_G[‘forum’][‘threadsorts’] && $_G[‘forum_thread’][‘sortid’] != 0}&sortid=$_G[forum_thread][sortid]{/if}

最后这段发帖链接变为:

{lang send_posts}

对应的onmouseover 事件:

变更为:


有两个比较需要留意的地方

  • 一个是发帖按钮对后台是否启用了分类信息的“发帖必须归类”选项有个值判断:

    !$_G[‘forum’][‘threadsorts’][‘required’]

    这里,我是直接去掉了这个判断,因为我启用了这个选项,版块对应的特殊主题也是关闭的,加入的内容随便放在if 或者else 之后估计不会有太大影响。当然如果有问题,还请指出:)

  • 另外一个,不是很重要,只是加上了typeid 及 sortid 是否等于0 的判断,因为如果不加上,那么在主题列表页没有选择主题分类或分类信息及相关帖子没有启用主题分类或分类信息时,发帖按钮(链接)激活的typeid 及sortid 值均为0,虽然没什么影响,但看起来十分不雅,so…

Comments