• 4183阅读
  • 58回复

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

上一主题 下一主题
离线zhangjingyu

只看该作者 48楼 发表于: 2020-09-16 23:39:03 星期三  点亮(0)
感谢楼主,祝福家园!

——本帖通过回复.
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 49楼 发表于: 2020-09-19 21:49:47 星期六  点亮(0)
回复48楼 zhangjingyu 的帖子
zhangjingyu 感谢楼主,祝福家园!

——本帖通过论坛手机版回复. (2020-09-16 23:39)   
本地测试成功!
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 50楼 发表于: 2020-09-19 21:51:30 星期六  点亮(0)
回复47楼 zhangjingyu 的帖子
zhangjingyu 继续测试,成功执行!
显示行 0 - 29 (104 总计, 查询花费 0.0035 秒)
看来随意指定顺序是差不多可行了! (2020-09-16 23:30)   
本地测试成功!
(刚才回复错楼层了!
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 51楼 发表于: 2020-09-19 21:52:38 星期六  点亮(0)
回复31楼 zhangjingyu 的帖子
zhangjingyu [图片]
本地测试数据共163条,按mark(排行榜类型)和value(值)降序排列(文件里sql查询语句)。mark值依次是:todaypost(今日发帖)、rvrc(威望)、postnum(发帖)、onlinetime(在线时间)、monthpost(本月发帖)、monoltime(本月在线)、money(铜币)、f_nu .. (2020-02-02 17:22)   
用47楼的代码,本地测试成功!
也就是lib/element.class.php文件里getAllUserSort()函数的查询方式,“$query = $this->db->query("SELECT * FROM pw_elements WHERE type='usersort' ORDER BY mark DESC, value DESC");”改为:
$query = $this->db->query("SELECT * FROM pw_elements WHERE TYPE =  'usersort' and mark in('monthpost','todaypost','onlinetime','money','postnum','rvrc','digests') order by instr('monthpost,todaypost,onlinetime,money,postnum,rvrc,digests',mark),value desc");

现准备改为最终想要的排序(一行显示三个排行榜):
今日发帖,本月发帖,发帖
精华帖,在线时间,本月在线
铜币,威望,祺石
贡献值,朋友数,活跃图客
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

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

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

只看该作者 53楼 发表于: 2020-09-19 22:19:50 星期六  点亮(0)
排行榜会员排行页面任意调整排序修改方法
—— 管理操作 •  zhangjingyu 执行 帖内置顶 操作 (2020-09-19 22:40) ——
lib/element.class.php文件里getAllUserSort()函数的查询方式,“$query = $this->db->query("SELECT * FROM pw_elements WHERE type='usersort' ORDER BY mark DESC, value DESC");”改为:
$query = $this->db->query("SELECT * FROM pw_elements WHERE TYPE =  'usersort' and mark in('todaypost','monthpost','postnum','digests','onlinetime','monoltime','money','rvrc','currency','credit','f_num','postMostUser') order by instr('todaypost,monthpost,postnum,digests,onlinetime,monoltime,money,rvrc,currency,credit,f_num,postMostUser',mark),value desc");
下面是原代码,也就是默认的排序方式(截图的后面还有一个贡献值排行榜,由于论坛没有设定积分规则,所以都是0。看代码还应该有朋友数和活跃图客排行榜,不知道为什么没有显示):


这是修改后的排序(同样的贡献值排行榜没有截取):
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

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

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

只看该作者 55楼 发表于: 2020-09-23 22:10:22 星期三  点亮(0)
后台pw缓存库里有一个缓存设置“会员信息(总发帖,本月发帖,今日发帖,在线时间,会员积分)”,这个应该就是会员排行吧。对应的后台文件是pwcache.htm:
<form action="$basename&adminitem=pwcache" method="post">
  <input type="hidden" name="step" value="2">
  <h2 class="h1"><span class="mr20">PW缓存库设置</span><span class="linka">勾选缓存项,提交后完成开启。<font color="red">开启后,请务必点击后面的更新缓存按钮</font></span></h2>
  <div class="admin_table mb10">
    <table cellpadding="0" cellspacing="0" width="100%">
    <tr class="tr1 vt">
        <td class="td2" width="20"><input type="checkbox" value="1" name="config[ifpwcache][]" $ifpwcache_1></td>
        <td class="td3"> 会员信息(总发帖,本月发帖,今日发帖,在线时间,会员积分)</td>
        <td class="td2">
            <span class="bt2"><span><button type="button" onclick="window.location=('$basename&adminitem=pwcache&action=update&type=usersort');">更新缓存</button></span></span>
        </td>
    </tr>
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 56楼 发表于: 2020-09-23 22:18:03 星期三  点亮(0)
经测试,后台pw缓存库对应的php文件是lib/elementupdate.class.php。楼上提到的很可能是会员排行榜的相关函数是userSortUpdate()(楼上红色标定。下面的代码略有修改,但没能成功实现):
    function userSortUpdate($winddb) {
        global $timestamp, $tdtime, $montime, $_CREDITDB;
        if ($this->_inUidBlackList($winddb['uid'])) {
            return false;
        }
        $usersort_judge = array();
        //* include pwCache::getPath(D_P . 'data/bbscache/usersort_judge.php');
        extract(pwCache::getData(D_P . 'data/bbscache/usersort_judge.php', false));
        $winddb['lastpost'] < $tdtime && $winddb['todaypost'] = 0;
        $winddb['lastpost'] < $montime && $winddb['monthpost'] = 0;
        $sorttype = array(
            'money',
            'rvrc',
            'credit',
            'currency',
            'todaypost',
            'monthpost',
            'postnum',
            'monoltime',
            'onlinetime',
            'digests',
            'f_num'
        );
        if ($_CREDITDB) {
            $query = $this->db->query("SELECT cid,value FROM pw_membercredit WHERE uid=" . S::sqlEscape($winddb['uid']));
            while ($rt = $this->db->fetch_array($query)) {
                if (!$rt['value']) continue;
                $winddb[$rt['cid']] = $rt['value'];
            }
            foreach ($_CREDITDB as $key => $val) {
                is_numeric($key) && $sorttype[] = $key;
            }
        }
        $change = $marks = array();
        foreach ($sorttype as $value) {
            if (in_array($value,$sorttype) && $winddb[$value]>PW_OVERFLOW_NUM) {
                $this->_excuteOverflow($winddb['uid'],$value);
                $winddb[$value] = 0;
            }
            if ($winddb[$value] > $usersort_judge[$value]) {
                $marks[] = $value;
                if ($value == 'rvrc') {
                    $winddb[$value] = floor($winddb[$value] / 10);
                } elseif ($value == 'onlinetime') {
                    $winddb[$value] = floor($winddb[$value] / 3600);
                } elseif ($value == 'monoltime') {
                    $winddb[$value] = round($winddb[$value] / 3600,2);
                }
                $change[] = array(
                    'usersort',
                    $value,
                    $winddb['uid'],
                    $winddb[$value],
                    $winddb['username'],
                    $timestamp
                );
            }
        }
        $rand_array = array(
            'todaypost',
            'monthpost',
            'monoltime'
        );
        $rand_key = array_rand($rand_array);
        $rand_mark = $rand_array[$rand_key];
        if (!in_array($rand_mark, $marks)) {
            $marks[] = $rand_mark;
        }
        if ($marks && $change) {
            $this->db->update("REPLACE INTO pw_elements(type,mark,id,value,addition,time) VALUES " . S::sqlMulti($change, false));
            $sortlist = array();
            $dellist = array();
            $query = $this->db->query("SELECT * FROM pw_elements WHERE type='usersort' AND mark IN (" . S::sqlImplode($marks) . ") ORDER BY mark,value DESC");
            while ($rt = $this->db->fetch_array($query)) {
                if (($rt['mark'] == 'todaypost' && $rt['time'] < $tdtime) || (in_array($rt['mark'], array(
                    'monthpost',
                    'monoltime'
                )) && $rt['time'] < $montime)) {
                    $dellist[] = $rt['eid'];
                    continue;
                }
                $sortlist[$rt['mark']][] = $rt;
            }
            $judge = $usersort_judge;
            foreach ($sortlist as $key => $value) {
                if (count($value) > $this->cachenum) {
                    $tem = array_pop($value);
                    $dellist[] = $tem['eid'];
                }
                if (count($value) == $this->cachenum) {
                    $tem = end($value);
                    $judge[$key] = $tem['value'];
                } else {
                    $judge[$key] = '0';
                }
            }
            if ($dellist) {
                $this->db->update("DELETE FROM pw_elements WHERE eid IN (" . S::sqlImplode($dellist) . ")");
            }
            if ($judge != $usersort_judge) {
                pwCache::setData(D_P . 'data/bbscache/usersort_judge.php', "<?php\r\n\$usersort_judge=" . pw_var_export($judge) . ";\r\n?>");
            }
        }
    }
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 57楼 发表于: 2020-09-23 22:59:28 星期三  点亮(0)
然而,在后台点击更新缓存,会员排行页面却不能更新为准确的数据(这个页面的数据一直都不准确,这让我比较不爽)。说明上面的函数可能有问题。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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