互助网 - 提供提供交流的地方.
新闻 | 网际影视 | 在线电影 | BT影视中心 | 转贴工具 | IP查询 | 在线代理 | 免费论坛 | 在线小游戏1 | flash小游戏2 | 广告交流平台
打印

[单用户] 论坛增加三级子版插件 有教程 for dizcuz 6.0 GBK

本主题由 xspace 于 2008-10-4 12:34 分类

论坛增加三级子版插件 有教程 for dizcuz 6.0 GBK

本插件功能,主要就是为论坛多增加一个分配节点。
附上演示图:演示站点http://dz.llgoo.com/bbs.php


由于修改过程比较复杂,且关联性也复杂,因此这里就不描述详细的过程了。
附件下载
文件修改:
./forumdisplay.php
./admin/forums.inc.php
./admin/global.func.php
./include/cache.func.php
./include/forum.func.php
./include/newreply.inc.php
./include/newthread.inc.php
./include/newtrade.inc.php
如果你开启了左右分栏,则还要改
./leftmenu.php
数据库修改:增加字段
复制内容到剪贴板
代码:
alter table cdb_forums add column sub3 tinyint (6) UNSIGNED  DEFAULT '0' NOT NULL  after simple;
开始修改
一、./forumdisplay.php
1、找到
复制内容到剪贴板
代码:
if($forum['type'] == 'forum') {
...} else {
...}
修改成
复制内容到剪贴板
代码:
if($forum['type'] == 'forum') {
        $navigation = "» $forum[name]";
        $navtitle = strip_tags($forum['name']);
} else {
        $forumup = $_DCACHE['forums'][$forum['fup']]['name'];
        $navigation = "» $forumup";
        $navtitle = strip_tags($forum['name']).' - '.strip_tags($forumup);
        if ($_DCACHE['forums'][$forum['sub3']]['name']) {
                $forumup = $_DCACHE['forums'][$forum['sub3']]['name'];
                $forumupid = $_DCACHE['forums'][$forum['sub3']]['fid'];
                $navigation = $navigation."» $forumup";
                $navtitle = $navtitle." - ".strip_tags($forumup);
        }
        $navigation = $navigation." » $forum[name]";
}
2、找到
复制内容到剪贴板
代码:
foreach($_DCACHE['forums'] as $sub) {
...}
换成
复制内容到剪贴板
代码:
foreach($_DCACHE['forums'] as $sub) {
        if($sub['type'] == 'sub' && ($sub['fup'] == $fid || $sub['sub3'] == $fid) && (!$hideprivate || !$sub['viewperm'] || forumperm($sub['viewperm']) || strstr($sub['users'], "\t$discuz_uid\t"))) {
                $subexists = 1;
                $sublist = array();
                if ($sub['sub3'] == '0') {
                        $sql = "select f.sub3 fid,sum(f.threads) threads,sum(f.posts) posts,sum(f.todayposts) todayposts from {$tablepre}forums f where ";
                        $sql = $sql."f.sub3>0 AND f.fup='$sub[fup]' group by f.sub3";
                        $query = $db->query($sql);
                        //echo $sql;
                        while($forumsub = $db->fetch_array($query)) {
                                $forumsublist[$forumsub['fid']]['fid']=$forumsub['fid'];
                                $forumsublist[$forumsub['fid']]['threads']=$forumsub['threads'];
                                $forumsublist[$forumsub['fid']]['posts']=$forumsub['posts'];
                                $forumsublist[$forumsub['fid']]['todayposts']=$forumsub['todayposts'];
                        }
                }
                $sql = $accessmasks ? "SELECT f.fid, f.fup, f.type, f.name, f.threads, f.posts, f.todayposts, f.lastpost, ff.description, ff.moderators, ff.icon, ff.viewperm, a.allowview FROM {$tablepre}forums f
                                                LEFT JOIN {$tablepre}forumfields ff ON ff.fid=f.fid
                                                LEFT JOIN {$tablepre}access a ON a.uid='$discuz_uid' AND a.fid=f.fid
                                                WHERE ".($sub[sub3]=='0' ? 'fup='.$fid.'' : 'fup='.$sub[fup].'')." AND status>0 AND type='sub' AND ".($sub[sub3]=='0' ? 'sub3=0' : 'sub3='.$sub[sub3].'')." ORDER BY f.displayorder"
                                        : "SELECT f.fid, f.fup, f.type, f.name, f.threads, f.posts, f.todayposts, f.lastpost, ff.description, ff.moderators, ff.icon, ff.viewperm FROM {$tablepre}forums f
                                                LEFT JOIN {$tablepre}forumfields ff USING(fid)
                                                WHERE ".($sub[sub3]=='0' ? 'fup='.$fid.'' : 'fup='.$sub[fup].'')." AND ".($sub[sub3]=='0' ? 'sub3=0' : 'sub3='.$sub[sub3].'')." AND f.status>0 AND f.type='sub' ORDER BY f.displayorder";
                //echo $sql;
                $query = $db->query($sql);
                while($sub = $db->fetch_array($query)) {
                        if(forum($sub)) {
                                $sub['orderid'] = count($sublist);
                                if($sub['fid'] == $forumsublist[$sub['fid']]['fid']) {
                                        $sub['threads'] = $sub['threads']+$forumsublist[$sub['fid']]['threads'];
                                        $sub['posts'] = $sub['posts']+$forumsublist[$sub['fid']]['posts'];
                                        $sub['todayposts'] = $sub['todayposts']+$forumsublist[$sub['fid']]['todayposts'];
                                }
                                $sublist[] = $sub;
                        }
                }
                break;
        }
}
二、./admin/forums.inc.php
此文件修改的比较多,但是该文件一般都不要修改,可以直接覆盖,如果你曾经改过这个文件,以后再写详细方法。

三、./admin/global.func.php
找到
复制内容到剪贴板
代码:
function showforum($key, $type = '') {
....}
替换成
复制内容到剪贴板
代码:
function showforum($key, $type = '') {
        global $forums, $showedforums, $lang, $indexname;

        $forum = $forums[$key];
        $showedforums[] = $key;

        return ''.$forum['name'].''.
                ($forum['status'] ? '' : ' ('.$lang['forums_hidden'].')').' - '.
                $lang['display_order'].':  - '.
                ($type == 'sub' ? '['.$lang['forums_add'].'] ' : $type != 'sub3' ? '['.$lang['forums_add'].'] ' : '').
                '['.$lang['edit'].']'.
                ($type != 'group' ? ' ['.$lang['forums_copy'].'] ' : ' ').
                '['.$lang['delete'].'] - '.
                '['.$lang['forums_moderators'].($forum['moderators'] ? ': '.str_replace("\t", ', ', $forum['inheritedmod'] ? ''.$forum['moderators'].'' : $forum['moderators']) : '').']'.
                '
';
}
四、./include/cache.func.php
改的比较多,建议覆盖,原有修改过的不要覆盖

四、./include/forum.func.php
找到
复制内容到剪贴板
代码:
function forumselect($groupselectable = FALSE, $tableformat = 0) {
...
}
替换成
复制内容到剪贴板
代码:
        global $_DCACHE, $discuz_uid, $groupid, $fid, $gid, $indexname;

        if(!isset($_DCACHE['forums'])) {
                require_once DISCUZ_ROOT.'./forumdata/cache/cache_forums.php';
        }

        $forumlist = $tableformat ? '' : '';
        foreach($_DCACHE['forums'] as $forum) {
                if($forum['type'] == 'group') {
                        if($tableformat) {
                                $forumlist .= ''.$forum['name'].'';
                        } else {
                                $forumlist .= $groupselectable ? ''.$forum['name'].'' : '';
                        }
                        $visible[$forum['fid']] = true;
                } elseif($forum['type'] == 'forum' && isset($visible[$forum['fup']]) && (!$forum['viewperm'] || ($forum['viewperm'] && forumperm($forum['viewperm'])) || strstr($forum['users'], "\t$discuz_uid\t"))) {
                        if($tableformat) {
                                $forumlist .= ''.$forum['name'].'';
                        } else {
                                $forumlist .= '  > '.$forum['name'].'';
                        }
                        $visible[$forum['fid']] = true;
                } elseif($forum['type'] == 'sub' && $forum['sub3'] == '0' && isset($visible[$forum['fup']]) && (!$forum['viewperm'] || ($forum['viewperm'] && forumperm($forum['viewperm'])) || strstr($forum['users'], "\t$discuz_uid\t"))) {
                        if($tableformat) {
                                $forumlist .=  ''.$forum['name'].'';
                        } else {
                                $forumlist .= '      > '.$forum['name'].'';
                        }
                        $visible[$forum['fid']] = true;
                } elseif($forum['type'] == 'sub' && $forum['sub3'] > '0' && isset($visible[$forum['fup']]) && (!$forum['viewperm'] || ($forum['viewperm'] && forumperm($forum['viewperm'])) || strstr($forum['users'], "\t$discuz_uid\t"))) {
                        if($tableformat) {
                                $forumlist .=  ''.$forum['name'].'';
                        } else {
                                $forumlist .= '          > '.$forum['name'].'';
                        }
                }
        }
        $forumlist .= $tableformat ? '' : '';
        $forumlist = str_replace($tableformat ? '' : '', '', $forumlist);

        return $forumlist;
}
五、./include/newreply.inc.php  newthread.inc.php   newtrade.inc.php
找到
复制内容到剪贴板
代码:
if($forum['type'] == 'sub') {
...
}
替换成
复制内容到剪贴板
代码:
if($forum['type'] == 'sub') {
                        $db->query("UPDATE {$tablepre}forums SET lastpost='$lastpost' WHERE fid='$forum[fup]'", 'UNBUFFERED');
                        $db->query("UPDATE {$tablepre}forums SET lastpost='$lastpost' WHERE fid='$forum[sub3]'", 'UNBUFFERED');
                }
[ 本帖最后由 wjmwaq 于 2008-3-17 09:14 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

我晕,请提供安装说明啊,要不然我们新手怎么用啊?拜托了,我很需要这个插件!!

TOP

除非你有这样的需求,否则的话原来的二级目录已经可以了。
修改肯定会有麻烦的,要是简单就不会没有人做了

TOP

特意来下载的,谢谢楼主

TOP

我是真的有这样的需求啊,打个比方说!我想设置为游戏交流区→网络游戏交流区→按字母分类→具体游戏的名称,如果没有这样的插见,那只能分到按字母分类这个子板块了,下面就不能分了!所以我很希望你能帮助我,给我一个这样的安装教程,麻烦都没关系,我很需要!

TOP

帮顶

TOP

有教程了

TOP

回复 undefined 的帖子

用 Beyond Compare 來比較一下 ...

TOP

引用:
原帖由 Eric03 于 2008-3-4 18:04 发表
用 Beyond Compare 來比較一下 ...
什么意思

TOP

回复 undefined 的帖子

因為用它的話
其實是可省去不少時間去找尋不同的地方

TOP

本站部分内容来自网络,版权归原作者所有,如涉及侵权请联系我们删除