TP6遇到需要无极限分类的问题

前言

在开发一后台的时候,遇到需要无极限的分类。经过三天三夜(没日没夜)摸索。终于解决的这波骚操作!!废话不多说,直接正题!

1、遇到的无极限分类需要两种情况。一种是栏目页的分类(如下图)

 另一种是菜单栏的分类(图下图)

 这是完全不一样的两种需求。

——————————开始表演  ↓

一、栏目页的分类

先看Column数据表

 ID就是栏目的ID

UID是上级栏目的ID

代码解释:

$cols=AtnColumn::order('id')->select();        //查询Column数据表,用ID排序
$col=menu($cols);            //查出来的数据交给公共函数处理!

公共类函数如下:

function menu($data,$uid=0,$level=0){

 //$data 就是传过来的数据  $uid暂且为0 $level为栏目等级

    static $arr=[]; //设置一个空数组 arr
 
    //开始循环判断数据
    foreach($data as $key=>$value) {
        if ($value['uid'] == $uid) {     //如果UID等于0,说明这是一个顶级栏目
            $value["level"] = $level;    //将栏目等级设为0级(也就是最高级)
            $arr[] = $value;  //放入数组 arr
            unset($data[$key]); //销毁当前值
            menu($data, $value['id'], $level + 1); //第一次循环所有0级的栏目,第二次循环所有1级栏目,知道最后一级。所以每次调用都需要 level+1
        }
    }
    return $arr;  //最后返回数组 arr
}

最后输出:

foreach($arr as $k=>$v){
    if($vo['uid']!=0){ //如果栏目等级不为0
        echo str_repeat("&nbsp",$vo["level"]*6).'|一'.$v['cname'];
          // $nbsp 是空格 ,repeat函数大概是重复输出
          //重复输出多少个空格(栏目多少级就多少个)接上栏目名。就达到我们想要的效果
    }
}

二、菜单的栏目分类 (懒了,直接上代码自己体会)

直接上代码:

$menuy=menuy(AtnColumn::select()->toArray());

//直接在数据库拿到数据然后传给 menuy函数

menuy函数代码如下:

function menuy($data,$uid=0){
    $arr=[];
    foreach ($data as $k=>$v){
        if ($v['uid']==$uid){
            $v['sub']=menuy($data,$v['id']);
            $arr[]=$v;
            unset($data[$k]);
        }
    }
    return $arr;
}

最后前端页面输出代码如下:

function forlist($data){
   $menu='';
   foreach ($data as $k=>$v){
       if(empty($v['sub'])){
            $menu=$menu. '<li><a href="content?umark='.$v['umark'].'&cmark='.$v['cmark'].'"><span>'.$v['cname'].'</span></a></li>';
       }else{
                $menu=$menu. '<li class="has-sub-menu" ><a href="content?umark='.$v['umark'].'&cmark='.$v['cmark'].'"><i class="ti-package"></i><span>'.$v['cname'].'</span></a>
                                            <ul class="side-header-sub-menu">'.forlist($v['sub']).'</ul>
                                        </li>';
        };
        unset($data[$k]);
    }
    return $menu;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
TP6的svalidate方法是ThinkPHP6框架中用于验证数据的方法。该方法可以在控制器或模型中使用,用于对用户输入的数据进行验证,以确保数据的合法性和完整性。 在TP6中,可以通过以下步骤来使用svalidate方法: 1. 首先,在控制器或模型中引入验证器类的命名空间,例如: use app\validate\User; 2. 然后,创建一个验证器对象,例如: $validate = new User; 3. 接下来,使用svalidate方法对数据进行验证,例如: $result = $validate->svalidate($data); 其中$data是要验证的数据,$result是验证结果,如果验证通过,$result将返回true,否则将返回错误信息。 需要注意的是,TP6的验证器类需要事先定义好验证规则和错误提示信息。你可以在验证器类中使用规则和消息方法来定义验证规则和错误提示信息。例如: public function rule() { return [ 'username' => 'require|max:25', 'password' => 'require|min:6', ]; } public function message() { return [ 'username.require' => '用户名不能为空', 'username.max' => '用户名长度不能超过25个字符', 'password.require' => '密码不能为空', 'password.min' => '密码长度不能小于6个字符', ]; } 通过以上步骤,你就可以在TP6中使用svalidate方法对数据进行验证了。如果验证通过,可以继续处理业务逻辑;如果验证失败,则可以返回错误信息给用户。 总结一下,TP6的svalidate方法是用于数据验证的方法,可以通过引入验证器类、创建验证器对象和使用svalidate方法对数据进行验证,以确保数据的合法性和完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值