• 4178阅读
  • 58回复

测试排行榜会员排行页面排序调整及主题标签长度修改 [复制链接] [手机版]

上一主题 下一主题
离线zhangjingyu

只看该作者 28楼 发表于: 2020-02-02 15:40:17 星期日  点亮(0)
sort.php
} elseif ($action == 'member') {
    $_SORTDB = $member = array();
    $array = array('todaypost','monthpost','monoltime','postnum','digests','onlinetime','rvrc','money','currency','credit','f_num','postMostUser');
    foreach ($_CREDITDB as $key => $value) {
        array_push($array,$key);
    }

    if ($db_ifpwcache & 1) {
        $element = L::loadClass('element');
        $element->setDefaultNum($cachenum);
        $_SORTDB = $element->getAllUserSort();
    } else {
        $cachetime = pwFilemtime(D_P."data/bbscache/member_sort.php");
        if (!$per || !file_exists(D_P."data/bbscache/member_sort.php") || ($timestamp-$cachetime>$per*3600)) {
            $step = $_GET['step'] ? intval($_GET['step']) : 0;
            if ($array[$step]) {
                //* @include pwCache::getPath(D_P."data/bbscache/member_tmp.php");
                pwCache::getData(D_P."data/bbscache/member_tmp.php");
                $element = L::loadClass('element');
                $element->setDefaultNum($cachenum);
                $member = $element->userSort($array[$step],0,false);
                unset($_SORTDB[$array[$step]]);
                foreach ($member as $v ) {
                    $_SORTDB[$array[$step]][] = array($v['addition']['uid'],$v['title'],$v['value']);
                }
                $step++;
                pwCache::setData(D_P.'data/bbscache/member_tmp.php',"<?php\r\n\$_SORTDB=".pw_var_export($_SORTDB).";\r\n?>");
                refreshto("sort.php?action=member&step=$step",'update_cache');
            } else {
                //* @include pwCache::getPath(D_P."data/bbscache/member_tmp.php");
                pwCache::getData(D_P."data/bbscache/member_tmp.php");
                pwCache::writeover(D_P.'data/bbscache/member_sort.php',"<?php\r\n\$_SORTDB=".pw_var_export($_SORTDB).";\r\n?>");
                //* P_unlink(D_P."data/bbscache/member_tmp.php");
                pwCache::deleteData(D_P."data/bbscache/member_tmp.php");
                refreshto("sort.php?action=member",'update_cache');
            }
        }
        @include pwCache::getPath(D_P."data/bbscache/member_sort.php");
        $cachetime=get_date($cachetime+$per*3600);        
    }
    $show_url="u.php?uid";
    require PrintEot('sort');footer();
这里提到的getAllUserSort()函数。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 29楼 发表于: 2020-02-02 16:00:34 星期日  点亮(0)
lib/element.class.php
    function getAllUserSort($round=0,$num=0,$special=false){
        global $_CREDITDB;
        !($this->ifpwcache & 1) && Showmsg('undefined_action');
        $num = intval($num) ? intval($num) : $this->defaultnum;
        $sorttype = array('money','rvrc','credit','currency','todaypost','monthpost','postnum','monoltime','onlinetime','digests','newUser','postMostUser');
        foreach ($_CREDITDB as $key => $val) {
            is_numeric($key) &&    $sorttype[] = $key;
        }
        $sort = $count = array();
        $query = $this->db->query("SELECT * FROM pw_elements WHERE type='usersort' ORDER BY mark DESC, value DESC");
        while ($rt = $this->db->fetch_array($query)) {
            if (!S::inArray($rt['mark'],$sorttype)) continue;
            if ($count[$rt['mark']]>=$num) {
                continue;
            }
            $sort[$rt['mark']][] = array($rt['id'],$rt['addition'],$rt['value']);
            $count[$rt['mark']]++;
        }
        return $sort;
    }
这里提到了pw_elements数据表。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 30楼 发表于: 2020-02-02 16:43:15 星期日  点亮(0)
打开本地的数据库管理软件,打开pw_elements数据表,执行sql语句:
SELECT * FROM pw_elements WHERE type='usersort' ORDER BY mark DESC, value DESC
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 31楼 发表于: 2020-02-02 17:22:20 星期日  点亮(0)
—— 管理操作 •  zhangjingyu 执行 帖内置顶 操作 (2020-02-02 18:39) ——

本地测试数据共163条,按mark(排行榜类型)和value(值)降序排列(文件里sql查询语句)。mark值依次是:todaypost(今日发帖)、rvrc(威望)、postnum(发帖)、onlinetime(在线时间)、monthpost(本月发帖)、monoltime(本月在线)、money(铜币)、f_num(朋友数)、digests(精华帖)、currency(祺石)、credit(贡献值)(和下面的会员排行榜拼图对应。其实还可能有个postMostUser,“活跃图客”。共12个)。
$array = array('todaypost','monthpost','monoltime','postnum','digests','onlinetime','rvrc','money','currency','credit','f_num','postMostUser');


lang_other.php
    'sort_rvrc'        => '$GLOBALS[db_rvrcname]',
    'sort_money'        => '$GLOBALS[db_moneyname]',
    'sort_credit'    => '$GLOBALS[db_creditname]',
    'sort_digest'    => '精华帖',
    'sort_onlinetime'    => '在线时间',
    'sort_postnum'    => '发帖',
    'sort_todaypost'    => '今日发帖',
    'sort_monthpost'    => '本月发帖',
    'sort_monoltime'    => '本月在线',
    'sort_postMostUser' => '活跃图客',
    'sort_digests'    => '精华帖',
    'sort_currency'    => '$GLOBALS[db_currencyname]',
    'sort_f_num'    => '朋友数',
里面四个没有具体名称的,调用后台全局定义的积分名称。为什么这个文件里会有“sort_”前缀,大概是因为在sort.htm文件里有这么一段(对应调用):
$type=!is_numeric($key) ? getLangInfo('other','sort_'.$key) : $_CREDITDB[$key][0];

所以,综上,想调整会员排行榜的排列顺序不是件容易的事。关键点是29楼提到的lib/element.class.php文件里getAllUserSort()函数的查询方式,“$query = $this->db->query("SELECT * FROM pw_elements WHERE type='usersort' ORDER BY mark DESC, value DESC");”,按mark和value降序排列查询到的结果,而后调用。恰恰这个mark排序不能任意调整顺序。所以,也就只能到此了,虽然不能调整顺序,但历时近两天的时间,我想,应该是研究明白了吧。

经测试,会员排行的排列顺序确实是受lib/element.class.php文件的查询排序控制。(35楼)
=================分隔线====================
更新:已经可以任意指定排序,详见53楼。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 32楼 发表于: 2020-02-02 18:41:46 星期日  点亮(0)
帖内置顶,也只能到此了。虽然没能实现,但原因和原理是基本弄明白了,好吧。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 33楼 发表于: 2020-02-03 08:51:44 星期一  点亮(0)
回复30楼 zhangjingyu 的帖子
zhangjingyu 打开本地的数据库管理软件,打开pw_elements数据表,执行sql语句:
 (2020-02-02 16:43)   
一会儿把mark的排序改一下,看看是不是会员排行榜的排序会变化。如果有变化,那就说明这里就是关键点所在。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 34楼 发表于: 2020-02-03 10:27:55 星期一  点亮(0)
刚才做活动聚焦的logo,和面等耽误了一些时间,这就马上试验。
http://www.vtu425.com/html/channel/act/
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 35楼 发表于: 2020-02-03 10:52:19 星期一  点亮(0)
33楼回复错了,应该是回复29楼。 当然了,回复30楼的方法也可以,但需要在数据库中操作,并且看不到直观的结果(会员排行的排序变化);而回复29楼的话,需要修改lib/element.class.php文件,只要修改文件就可以达到测试的目的。我采用的是后面的方法,但出现了一点儿小错误,降序排列是desc,升序排列应该是asc,而不是esc,哈哈。
经测试,会员排行的排列顺序确实是受lib/element.class.php文件的查询排序控制。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 36楼 发表于: 2020-02-03 14:05:16 星期一  点亮(0)
SQL 按指定顺序进行排序
在有些情况下我们需要按指定顺序输出数据,比如选择了ID in(3,1,2,5,4)我们希望按这个3,1,2,5,4的顺序输出,这样只使用order by ID是无法实现的,但是我们可以使用order by charindex(','+convert(varchar,ID)+',',',3,1,2,5,4,')的方法来实现这个目的。举例如下:
Create Table info(
ID int identity(1,1) not null,
title varchar(100) not null
)

select id,title from info where id in ('3,1,2,5,4') order by charindex(','+convert(varchar,ID)+',',',3,1,2,5,4,')
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 37楼 发表于: 2020-02-03 14:08:09 星期一  点亮(0)
修改、测试了半天,没成功。算了,不研究这个了。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!