Fastadmin筛选分类时获取选中分类及其子分类
2023-12-15 21:47:26
如下图:列表根据分类进行下拉筛选,选中某一分类后,筛选这一分类及其字分类。
实现分类下拉筛选代码:
var table = $("#table");
//新增 配置调用接口
table.on('post-common-search.bs.table', function (event, table) {
var form = $("form", table.$commonsearch);
$("input[name='category_id']", form).addClass("selectpage").data("source", "category/index?type=consult").data("primaryKey", "id").data("field", "name").data("orderBy", "id desc");
Form.events.cxselect(form);
Form.events.selectpage(form);
});
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id'),operate: false},
// {field: 'category_id', title: __('Category_id')},
//新增 筛选窗
{field: 'category_id', title: __('Cate_name'), formatter: Table.api.formatter.search,visible:false},
{field: 'cate_name', title: __('Cate_name'), operate: false},
{field: 'title', title: __('Title'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'status', title: __('Status'), searchList: {"1":__('Status 1'),"2":__('Status 2')}, formatter: Table.api.formatter.status},
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
{field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
后台获取子分类,并把筛选由eq改成in
首先将fastadmin的生成查询条件的方法buildparams复制到当前控制器(在当前类重写buildparams方法);
然后在buildparams方法的如下位置添加代码
$index = 0;
//如果传的有category_id就获取他的所有字分类
foreach ($filter as $key=>$value){
if($key=='category_id'){
//获取所有字分类id的方法,可下面的获取子分类方法,自己实现
$cateModel = new Category();
$filter[$key] = $cateModel->get_children($value,'consult');
//筛选方式改成in
$op['category_id'] = 'in';
}
}
foreach ($filter as $k => $v) {
if (!preg_match('/^[a-zA-Z0-9_\-\.]+$/', $k)) {
continue;
}
获取子分类方法
<?php
namespace app\admin\model;
use think\Model;
class Category extends Model
{
// 表名
protected $name = 'category';
/**
* 获取某一分类的所有子分类id
* @param $pid
* @param $type
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function get_children($pid,$type){
$arrCate = self::where('type',$type)->field('id,pid')->select();
$lists = $this->getTree($arrCate,$pid);
$ids = array_column($lists,'id');
$ids[] = (int)$pid;
return $ids;
}
/**
* 获取扁平的子分类
* @param $arrCate
* @param $pid
* @param $level
* @return array
*/
public function getTree($arrCate, $pid = 0, $level = 0){
static $arrTree = []; //static函数执行完后变量值仍然保存
if(empty($arrCate)) return [];
$level++;
foreach($arrCate as $key => $value){
if($value['pid'] == $pid){
$value['level'] = $level;
$arrTree[] = $value;
unset($arrCate[$key]); //注销当前节点数据,减少已无用的遍历
$this->getTree($arrCate, $value['id'], $level); //递归调用
}
}
return $arrTree;
}
}
如上,就实现了查询该分类和其字分类。
文章来源:https://blog.csdn.net/qq_40088333/article/details/135018884
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!