Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

如何修复移动版块帖子时,隐藏版块不显示问题!

[复制链接]
elevensky 发表于 2011-7-26 10:39:33 | 显示全部楼层 |阅读模式
今天遇到一个问题就是,后台设置隐藏的版块,无法接受其他版块的的帖子移动到这个版块,于是查了查程序发现是在处理的时候,在用户选择移动版块列表的时候没有列出隐藏的版块!
下面我以帖子列表页的帖子操作为例,首先打开forumdisplay_list.htm,找到
<!--{if $_G['forum']['ismoderator']&& $_G['forum_threadcount']}-->
         <!--{templateforum/topicadmin_modlayer}-->
<!--{/if}-->
当你选择帖子前面的复选框进行操作事,将会通过js触发一系列的执行过程,显示出如图的操作框:

这个页面是最终的显示选择框,其中移动的选择框是通过ajax触发的,具体的过程比较繁琐,大家可以自己研究下。
这里通过最重的参数传递和调用,将调用./template/default/forum/topicadmin.htm文件,根据动作参数
<!--{elseif$_G['gp_optgroup'] == 2}-->
进入下面的执行代码,显示版块选择框:

  1. <!--{elseif $_G['gp_optgroup'] == 2}-->
  2.                                 <div class="tplw">
  3.                                         <!--{if $operation != 'type'}-->
  4.                                                 <input type="hidden" name="operations[]" value="move" />
  5.                                                 <p class="mbn tahfx">
  6.                                                         {lang admin_target}: <select name="moveto" id="moveto" class="ps vm" onchange="ajaxget('forum.php?mod=ajax&action=getthreadtypes&fid=' + this.value, 'threadtypes');if(this.value) {$('moveext').style.display='';} else {$('moveext').style.display='none';}">
  7.                                                                 $forumselect
  8.                                                         </select>
  9.                                                 </p>
  10.                                                 <p class="mbn tahfx">
  11.                                                         {lang admin_targettype}: <span id="threadtypes"><select name="threadtypeid" class="ps vm"><option value="0" /></option></select></span>
  12.                                                 </p>
  13.                                                 <ul class="llst" id="moveext" style="display:none;margin:5px 0;">
  14.                                                         <li class="wide"><label><input type="radio" name="type" class="pr" value="normal" checked="checked" />{lang admin_move}</label></li>
  15.                                                         <li class="wide"><label><input type="radio" name="type" class="pr" value="redirect" />{lang admin_move_hold}</label></li>
  16.                                                 </ul>
  17.                                         <!--{else}-->
  18.                                                 <!--{if $typeselect}-->
  19.                                                         <input type="hidden" name="operations[]" value="type" />
  20.                                                         <p>{lang types}: $typeselect</p>
  21.                                                 <!--{else}-->
  22.                                                         {lang admin_type_msg}<!--{eval $hiddensubmit = true;}-->
  23.                                                 <!--{/if}-->
  24.                                         <!--{/if}-->
  25.                                 </div>
复制代码
这里的$forumselect就是封装的论坛版块的选项,我们只要让这个变量包含隐藏的版块即可,找到topicadmin_moderate.php
  1. } elseif($_G['gp_optgroup'] == 2 || $_G['gp_optgroup'] == 5) {
  2.                 require_once libfile('function/forumlist');
  3.                 $forumselect = forumselect(FALSE, 0, $threadlist[$_G['tid']]['fid']);
  4.                 $typeselect = typeselect($single ? $threadlist[$_G['tid']]['typeid'] : 0);
复制代码
这里对$forumselect做了封装,在function_forumlist.php找到forumselect函数:
  1. foreach($forumcache as $forum) {
  2.                 if(!$forum['status'] && !$showhide) {
  3.                         continue;
  4.                 }
  5.                 if($selectedfid) {
  6.                         if(!is_array($selectedfid)) {
  7.                                 $selected = $selectedfid == $forum['fid'] ? ' selected' : '';
  8.                         } else {
  9.                                 $selected = in_array($forum['fid'], $selectedfid) ? ' selected' : '';
  10.                         }
  11.                 }
  12.                 if($forum['type'] == 'group') {
  13.                         if($arrayformat) {
  14.                                 $forumlist[$forum['fid']]['name'] = $forum['name'];
  15.                         } else {
  16.                                 $forumlist .= $groupselectable ? '<option value="'.($evalue ? 'gid_' : '').$forum['fid'].'" class="bold">--'.$forum['name'].'</option>' : '</optgroup><optgroup label="--'.$forum['name'].'">';
  17.                         }
  18.                         $visible[$forum['fid']] = true;
  19.                 } elseif($forum['type'] == 'forum' && isset($visible[$forum['fup']]) && (!$forum['viewperm'] || ($forum['viewperm'] && forumperm($forum['viewperm'])) || strstr($forum['users'], "\t$_G[uid]\t")) && (!$special || (substr($forum['allowpostspecial'], -$special, 1)))) {
  20.                         if($arrayformat) {
  21.                                 $forumlist[$forum['fup']]['sub'][$forum['fid']] = $forum['name'];
  22.                         } else {
  23.                                 $forumlist .= '<option value="'.($evalue ? 'fid_' : '').$forum['fid'].'"'.$selected.'>'.$forum['name'].'</option>';
  24.                         }
  25.                         $visible[$forum['fid']] = true;
  26.                 } elseif(!$arrayformat && $forum['type'] == 'sub' && isset($visible[$forum['fup']]) && (!$forum['viewperm'] || ($forum['viewperm'] && forumperm($forum['viewperm'])) || strstr($forum['users'], "\t$_G[uid]\t")) && (!$special || substr($forum['allowpostspecial'], -$special, 1))) {
  27.                         $forumlist .= '<option value="'.($evalue ? 'fid_' : '').$forum['fid'].'"'.$selected.'>      '.$forum['name'].'</option>';
  28.                 }
  29.         }
复制代码
这一部分详细的判断了根据如何条件对版块列表的变量进行的封装。
if(!$forum['status'] && !$showhide){
                            continue;
                   }
这里对隐藏的版块进行了进行了忽略操作,所以我们直接注释掉跳过的continue;
改为

if(!$forum['status'] && !$showhide){
                   //      continue;
                   }
然后此段程序
  1. elseif(!$arrayformat && $forum['type'] == 'sub' && isset($visible[$forum['fup']]) && (!$forum['viewperm'] || ($forum['viewperm'] && forumperm($forum['viewperm'])) || strstr($forum['users'], "\t$_G[uid]\t")) && (!$special || substr($forum['allowpostspecial'], -$special, 1))) {
  2.                         $forumlist .= '<option value="'.($evalue ? 'fid_' : '').$forum['fid'].'"'.$selected.'>      '.$forum['name'].'</option>';
  3.                 }
复制代码
将子版块类型的版块进行了显隐判断,如果是显隐状态为现实,则加入$forumlist列表封装,我们这里直接将此判断条件去除,即可:
  1. elseif(!$arrayformat && $forum['type'] == 'sub' &&  (!$forum['viewperm'] || ($forum['viewperm'] && forumperm($forum['viewperm'])) || strstr($forum['users'], "\t$_G[uid]\t")) && (!$special || substr($forum['allowpostspecial'], -$special, 1))) {
复制代码
那,修改此两处,就可以显示出隐藏的版块了!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
82076322 发表于 2011-7-26 15:32:18 | 显示全部楼层
这算不算BUG呢?
回复

使用道具 举报

罗汉绿草 发表于 2011-7-30 15:31:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

hunterdd 发表于 2011-8-25 15:26:28 | 显示全部楼层
太好了    我去试试
回复

使用道具 举报

ptkptkptk 发表于 2011-9-17 10:09:14 | 显示全部楼层
我的function_forumlist.php forumselect函数跟你有不同
回复

使用道具 举报

1921625998 发表于 2011-9-18 10:28:52 | 显示全部楼层
来学习了……
回复

使用道具 举报

一枝秀 发表于 2014-11-1 15:33:31 | 显示全部楼层
版主,上述修改带来一个问题,即全部隐藏分区下面的栏目都给显示了,在快速导航的栏目导航那也一样被显示出来了。

我有个想法,在function_forumlist.php文件原代码基础上增加一个对分区二级域名是否设置的判断条件,即对分区版块尚未设置二级域名的该分区下面的栏目才禁止显示,否则展开显示,以便版主移帖。只是这如何写法呢?盼指教。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-22 14:05 , Processed in 0.032810 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表