分享
  • 收藏
    X
    @aria 需要的每周赚取的积分排行使用
    294
    24
    下面代码保存到fun函数目录即可
    <?php
    namespace app\common\fun;
    use think\db;
    
    class Jfrank
    {
        /**
         * @param string $day 日期单位  day天 week周  month月
         * @param int $num   具体日期数字1  比如1天  1周  1月
         *  @param int $rows 返回行数
         * @return array
         */
        public function ranking($row=10,$day='week',$num=1){
            $array =[];
            $map['posttime'] = fun('time@only',$day,$num);
            $map['money']  = ['>',0];
           $rs =  Db::name('moneylog')->field('uid,SUM(money) as s_money')
                ->where($map)
                ->group('uid')
                ->order('s_money desc')
                ->limit($rows)
                ->select();
            foreach($rs As $arr){
                $uid = $arr['uid'];
                $info = Db::name('memberdata')->where('uid',$uid)->find();
                $array[] = array_merge($info,$arr);
            }
    
            return $array;
    
          
        }
    }


    模版里的使用方式,直接复制下面代码到你需要展示的地方
    <h2>本周积分排行</h2>
    {volist name=":fun('Jfrank@ranking')" id="rs"}
        <div>
            <span><img src="{$rs.icon|tempdir}" width="20" height="20" /></span>&nbsp;
            <span>{$rs.username}</span>&nbsp;
            <span>本周总赚取的积分:{$rs.s_money}</span>
        </div>
    {/volist}


    本fun函数详解

    { :fun('Jfrank@ranking',10,'week',1)}  默认为返回10个用户一周内的从大到小的赚取积分排行

    如果需要其他时间段,则传递参数,参数上面代码已经说明

    比如需要今天一天的,则是:

    { :fun('Jfrank@ranking',10,'day',1)}

    一个月的则是:

     { :fun('Jfrank@ranking',10,'month',1)}

    一年的则是:

     { :fun('Jfrank@ranking',10,'month',12)}


    直接下载附件,放到application\common\fun目录下

    147_2019060320422657e3c.zip



    5
    打赏
    收藏
    点击回复
        全部留言
    • 24
    • aria 普通粉丝 消费:268.6元 3个月前 11:281楼

      怎么才能不统计充值增加的积分呢?只统计签到和奖励等方式获得的积分,谢谢

      aria 消费:268.6元 3个月前
      怎么自动生成排名顺序号呢,比如第1名,第2名
      torylf 消费:24.43元 3个月前
      比较麻烦,要做筛选,或者在签到或者奖励后直接做好统计,没什么直接的办法;
      排名顺序号,自己在模版里处理,本来就是从大到小排列,你直接写第一、第二就好了
      aria 消费:268.6元 其他手机 3个月前
      @torylf 

      好的,谢谢
    • aria 普通粉丝 消费:268.6元 4个月前 21:354楼
      显示会员赚得的所有积分该怎么设置参数呢?就是从注册以后所有的积分收入
      torylf 消费:24.43元 4个月前
      所有分数,就不需要统计时间,这个函数不适合,如果是所有的,直接sql取数据库里全部的money>0的数据,然后sum加起来就可以了,比这个容易多
      aria 消费:268.6元 4个月前
      @torylf 

      不会写啊
      torylf 消费:24.43元 4个月前

      其实把上面稍微改写下就可以了

      $map['posttime'] = fun('time@only',$day,$num);  改为
      
      if($day != 'all'){
          $map['posttime'] = fun('time@only',$day,$num);
      }

      模板里直接传个all就是所有的

       { :fun('Jfrank@ranking',10,'all')}

      aria 消费:268.6元 4个月前
      ranking($rows=3,$day='all'){
              $array =[];
              if($day != 'all'){
          $map['posttime'] = fun('time@only',$day,$num);
      }

      我这样改的,模版调用没有改,可以用

      谢谢
    • aria 普通粉丝 消费:268.6元 5个月前 21:547楼

      非常感谢,@torylf,如果想显示上周的积分排行,时间应该怎么写呢?

      torylf 消费:24.43元 5个月前
      上周:{ :fun('Jfrank@ranking',10,'week',2)}
      上上周:{ :fun('Jfrank@ranking',10,'week',3)}
      以此类推...
      aria 消费:268.6元 5个月前
      @torylf 

      我以为2是连续两周总和,
      torylf 消费:24.43元 5个月前
      都是单计数,如果要2周总和就分别调用2次,然后用模版拼出来
      aria 消费:268.6元 5个月前
      @torylf 

      我试试看,谢谢
      aria 消费:268.6元 5个月前
      @torylf 
      这里用<a href="{$rs.url}">不能获取到会员空间的链接?
      torylf 消费:24.43元 5个月前
      链接用这个 href="{:get_url('user',$rs['uid'])}"
      aria 消费:268.6元 其他手机 5个月前
      @torylf 

      可以了,谢谢
    • judqr 普通粉丝 消费:2871.84元 5个月前 06:208楼

      确实实用

    • snscn 普通粉丝 消费:1862.35元 5个月前 01:09
      其他手机
      9楼
      看来得仔细研究下fun函数了,要玩转X1,fun函数不能忽视。
    • 石头 风格开发者 消费:9087.32元 5个月前 22:0510楼

      感谢分享

    • 奋斗 普通粉丝 消费:1元 5个月前 20:4511楼

      楼主好人,感谢分享

    • 天外来客 风格开发者 消费:41.5元 5个月前 20:4012楼

      收藏! 

    更多回复
    神盾SOHO
        圈内贴子1359
    • 圈子成员98
    本圈子内的新贴

    热门分类
    推荐内容
    扫一扫访问手机版
    请选择要切换的马甲: