商品分类管理模块基本完成

无限分类

1.表的变化
    所谓无限分类,就是用一张表来实现所有分类,在原来简单分类表的基础上,加了个pid字段,这就是数据表方面的变化。

这里写图片描述

2.控制器,模型的变化
    我们原先的分类是一级的,就是分类下不能再添加分类了,我们现在开始改进,我们首先把想要的无限分类层级数据手动添加到数据库中:pid为0就是顶级分类,然后pid为某值就是某分类下,参考上图理解。
    现在我们还按以前的方法,在控制器中像输出所有管理员那样,来获得分类列表,这时候我们会发现,得到的结果不是我们想要的,我们要的是按分类有序排列的列表。
    这时候,我们发现控制器这样不够用了,此刻,我终于开始感觉到模型的用处了,(原来的模型啥都不用写,就能完成增删改查,我一直很好奇模型还有什么拓展作用),涉及到数据处理,就用模型来完成。
    思路是模型中新增得到树桩分类的方法,然后在控制器中调用模型的那个方法来获得有序的二维数组,不再是我们那个按数据表依次读下来的二维数组了。然后传到视图中,代码如下
    犯的几个错误:1.模型里写的方法,在控制器访问,要实例化模型后再访问(除非写的是静态方法) 2.不要用getdata作为模型里的函数名,估计是关键字,会出问题 3.到视图中,怎么把杠杠显示出来,我一开始用的是很low的原始伎俩,就是各个元素用level做class,然后写段js放在页面中,遇到class为啥的就加几个杠杠,蠢哭。查阅资料,发现神技`{$cate['level']|str_repeat="——丨",###}{$cate.cName}`,当然这一切都是建立在模型中level的存在基础上!
模型中
<?php

namespace app\admin\model;

use think\Model;

class Cate extends Model
{
   public function gettree(){
        $arr=$this->all();
        return $this->tree($arr);    
   }

   //定义一个方法,对给定的数组,递归形成树
    public function tree($arr,$pid=0,$level=0){
        static $tree = array();
        foreach($arr as $v){
            if($v['pid']==$pid){
                //说明找到,保存
                $v['level'] = $level;
                $tree[] = $v;
                //继续找
                $this -> tree($arr,$v['id'],$level+1);
            }
        }
        return $tree;
    }
}
控制器中
 public function categorylist(){
        $cate=new Cate;
        $cate=$cate->gettree();
        return view('categorylist',['cate'=>$cate]);
    }
视图中
<tbody>
                           {volist name="cate" id="cate"}
                                <tr>
                                <!--这里的id和for里面的c1 需要循环出来-->
                                <td><input type="checkbox" id="c1" class="check"><label for="c1" class="label">{$cate.id}</label></td>
                                <td>{$cate['level']|str_repeat="——丨",###}{$cate.cName}</td>
                                <td align="center">
                                <input type="button" value="修改" class="edit2 btn" info="{:url('admin/category/edit')}"><!--info好像没用上-->
                                <input type="button" value="删除" class="del btn" info="{:url('admin/category/del')}"><!--info好像没用上,用上咯-->
                                </td>
                            </tr>
                            {/volist}
                            <tr><td colspan="4"></td></tr>
                        </tbody>
添加分类
    主要就是在添加分类的视图中,增加一个上级分类,然后就是把分类列表传到下拉菜单中
public function add(){
        if(request()->isPost()){
            $catename=input('catename');
            $upcateid=input('upcateid');
            $cate=new Cate;
            $cate->cName=$catename;
            $cate->pid=$upcateid;
            if($cate->save()){
                return '分类:'.$catename.'新增成功!'.'<br>'.
                '<a class="ajax" info="'.url('admin/category/add').'">继续新增</a>'.'|'.'<a class="ajax" info="'.url('admin/category/categorylist').'">返回分类列表</a>';
            }else{
                return $cate->getError();
            }
        }else{
            $cate=new Cate;
            $cate=$cate->gettree();
            return view('add',['cate'=>$cate]);    
        }   
    }

然后点击提交的时候,要把select中选定的option中的id传去作为新增分类的pid

视图中
<td>
                                    <select id="downlist" style="width:200px;">
                                        <option>顶级分类 </option>
                                        {volist name="cate" id="cate"}
                                        <option value="{$cate.id}">{$cate['level']|str_repeat="——丨",###}{$cate.cName}</option>
                                        {/volist}
                                    </select>
                                </td>
jquery中
//新增分类提交
    $(document).on('click','.submit3',function(){
        var catename=$('#catename').val();
        var upcateid=$('#downlist').val();
        $.post("/lolnews/public/admin/category/add.html",
        {'catename':catename,'upcateid':upcateid},
        function(data){
            $('#ajaxshow').html(data);
        })
        return false;       
    });

无限分类基本完成。

### 如何使用 Keil5 Hex 文件 对于仅拥有已编译好的 hex 文件而无源文件的情况,在 Keil V5 平台上直接hex 文件至单片机(如华大单片机)需采取特定的方法,因为直接调用该平台进行此类操作不可行[^1]。 #### 设置 Output 路径 进入 Keil 的 output 设置界面,指定要录的 hex 文件的具体位置。确保在路径输入框中填完整的 hex 文件名称并附带 `.hex` 扩展名;缺少此扩展名可能导致系统继续尝试录先前编译的结果而非所选的 hex 文件[^3]。 #### 配置 Flash 工具选项 针对不同类型的微控制器(MCU),可能还需调整 flash 下载工具的相关配置参数以匹配目标设备的要求。这一步骤通常涉及选择合适的编程算法以及设定通信接口等细节[^2]。 #### 启动下载过程 完成上述准备工作之后,可以通过点击调试窗口内的 “Download” 或者快捷菜单里的相应命令来启动实际的程序入流程。如果一切顺利的话,软件会自动连接硬件并将选定的 hex 数据传输到 MCU 中存储起来[^4]。 ```python # Python 示例代码用于说明自动化脚本概念 (并非真实实现) def download_hex_to_mcu(hex_file_path, mcu_type): """ 自定义函数模拟将 HEX 文件下载到指定型号的 MCU 上 参数: hex_file_path -- 完整路径字符串指向待上传的 .hex 文件 mcu_type -- 字符串表示的目标单片机类型标识符 返回值: 成功则返回 True ,失败抛出异常信息 """ try: configure_output_settings(hex_file_path) # 设定输出设置 select_flash_tool(mcu_type) # 挑选适合的闪存工具 execute_download_command() # 发送下载指令 return True # 表明成功结束 except Exception as e: raise RuntimeError(f"Failed to upload {hex_file_path}: {e}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值