TP5+微信小程序通过无限分类实现分类功能

TP5步骤如下:
Model:新建一个Cate.php,内容如下:

<?php
namespace app\admin\model;
use think\Model;
class Cate extends Model
{
    // 无限分类
    public function cateTree()
    {
        $cateRes = self::order('sort desc')->select();
        return $this->_sort($cateRes);
    }

    private function _sort($cateRes,$pid = 0,$level = 0 )
    {
        static $arr = array();
        foreach($cateRes as $k=>$v)
        {
            if($v['pid'] == $pid){
                $v['level'] = $level;
                $arr[] = $v;
                $this->_sort($cateRes,$v['id'],$level+1);
            }
        }
        return $arr;
    }

    // 获取子目录
    /**
     * $id 当前id
     */
    public function getChildren($id)
    {
        $data = self::select();
        return $this->_getChildren($data,$id);

    }
    private function _getChildren($data,$id)
    {
        $data = self::select();
        static $arr = array();
        foreach($data as $k=>$v)
        {
            if($v['pid'] == $id){
                $arr[] = $v['id'];
                $this->_getChildren($data,$v['id']);
            }
        }
        return $arr;

    }
}

控制器层:

<?php
namespace app\admin\controller;
use think\Controller;
use think\Request;

class Cate extends Controller
{
    public function index()
    {
        return view('cate/list');
    }

    public function add()
    {
        $cateRes = model('cate')->cateTree();
        $this->assign('cateRes',$cateRes);
        if(request()->isAjax()){
            $data = Request::instance()->param();
            unset($data['file']);
            $add = db('cate')->insert($data);
            if($add){
                return json(['code'=>200,'msg'=>'操作成功']);
            }else{
                return json(['code'=>502,'msg'=>'操作失败']);
            }
            return;
        }
        return view('cate/add');
    }

    public function edit()
    {
        $id = input('id');
        $cateres = db('cate')->where('id',$id)->find();
        $this->assign('cateres', $cateres);
        $cateRes = model('cate')->cateTree();
        $this->assign('cateRes',$cateRes);
        if(request()->isAjax()){
            $data = Request::instance()->param();
            unset($data['file']);
            $edit = db('cate')->where('id',$data['id'])->update($data);
            if($edit !== false){
                return json(['code'=>200,'msg'=>'操作成功']);
            }else{
                return json(['code'=>502,'msg'=>'操作失败']);
            }
            return;
        }
        return view('cate/edit');
    }

    public function del($id)
    {
        if(request()->isAjax()){
            $sonIds = array();
            $sonIds = model('cate')->getChildren($id);
            $sonIds[] = intval($id);
            // 循环删除
            foreach ($sonIds as $k => $v) {
                $cates = db('cate')->field('thumb')->find($v);
                $thumbSrc = COURSE_IMG.$cates['thumb'];
                if(file_exists($thumbSrc)){
                    @unlink($thumbSrc);
                }
                db('cate')->delete($v);
            }
            return json(['code'=>200,'msg'=>'操作成功']);
        }
    }
    public function listJson()
    {
        $data=Request::instance()->param();//用接收各种类型的数据函数
        if($data){
            $page=$data['page'];
            $limit=$data['limit'];
        }else{
            $page=1;
            $limit=10;
        }
        $info = model('cate')->cateTree();
        foreach($info as $k=>$v){
            if($v['pid'] == 0){
                $info[$k]['cate_name'] = $v['cate_name'];
            }else{
                $info[$k]['cate_name'] = '|'.str_repeat('-',$v['level']*8).$v['cate_name'];
            }
        }
        $count = count(db('cate')->select());
        return json(['code'=>200,'count'=>$count,'info'=>$info,'msg'=>'数据调取成功']);
    }
}

微信小程序步骤如下:
wxml

<!--pages/cate/cate.wxml-->
<view class="cate">
  <view class="cate-left">
    <scroll-view scroll-y="true">
      <block wx:for="{{ topCate }}">
        <view bindtap="changeTab" data-id="{{ item.id }}" class="navitem {{ item.id == cateId ? 'current' : '' }}">{{ item.cate_name }}</view>
      </block>
    </scroll-view>
  </view>

  <view class="cate-right">
      <image class='cate-banner' mode='widthFix' src='{{ cates.thumb }}'></image> 
      <scroll-view scroll-y="true">
        <view class="cate-label">{{ cates.cate_name }}</view>
        <view class="cate-list">
          <view class="cate-item" wx:for="{{ sonCates }}">
              <image class="cate-img" mode="widthFix" src="{{ item.thumb }}" style=""></image>
              <text class="cate-name">{{ item.cate_name }}</text>
          </view>
        </view>
      </scroll-view>

  </view> 
</view>

wxss

/* pages/cate/cate.wxss */
.cate{width:100%;height:100%;display: flex;}
.cate .cate-left{width:25%;height:100%;border-right:1rpx solid #e3e3e3;}
.cate .cate-left .navitem{text-align: center;padding:30rpx 0;font-size:32rpx;}
.cate .cate-left .current{border-left:6rpx solid #ff9801;color:#ff9801;}
.cate .cate-right{width:75%;padding:20rpx;}
.cate .cate-right .cate-banner{width:100%;}
.cate .cate-right .cate-label{text-align: left;border-bottom:1rpx solid #ccc;padding-bottom:10rpx;margin:20rpx 0;}
.cate-list{display: flex;flex-wrap: wrap;}
.cate-list .cate-item{width: 30%;margin:20rpx 8rpx;text-align: center;}
.cate-list .cate-item .cate-name{font-size: 28rpx;}
.cate-list .cate-item .cate-img{width:68px;height:68px;border:1px solid #e3e3e3}

js

//页面初始数据
data: {
    // 所有栏目数据 二维数组
    topCate:[],
    // 当前栏目数据 一维数组
    cates:[],
    // 二级栏目 多维数组
    sonCates:[],
    // 初始id
    cateId:12
  }
// 请求顶级分类接口
  topCate: function () {
    var _this = this;
    var cateId = this.data.cateId;
    wx.request({
      url: config.topCate,
      success(res) {
        console.log('顶级栏目',res.data);
        _this.setData({
          topCate: res.data
        })
      }
    })
// 请求当前栏目数据
    wx.request({
      url: config.cateFind + cateId,
      success(res) {
        console.log('当前栏目数据:',res.data);
        _this.setData({
          cates: res.data
        })
      }
    })
// 获取对应的二级子栏目
    wx.request({
      url: config.get_son_cate + cateId,
      success(res) {
        console.log('二级子栏目', res.data);
        _this.setData({
          sonCates: res.data
        })
      }
    })
  }
// 切换顶级栏目高亮状态并获取所对应的栏目数据
  changeTab:function(e){
    var _this = this;
    var curId = e.target.dataset.id;
    _this.setData({ cateId:curId});
    var cateId = this.data.cateId;
    // 请求当前栏目数据
    wx.request({
      url: config.cateFind + cateId,
      success(res) {
        _this.setData({
          cates: res.data
        })
      }
    })
    // 获取对应的二级子栏目
    wx.request({
      url: config.get_son_cate + cateId,
      success(res) {
        _this.setData({
          sonCates: res.data
        })
      }
    })
  }
//页面加载后执行
  onLoad: function (options) {
  //调取分类
    this.topCate();
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值