thinkphp5 之 菜单管理

这篇博客介绍了如何在ThinkPHP5框架中实现动态管理菜单,通过将菜单数据存储和缓存,方便进行修改。文章详细展示了创建菜单列表、添加/修改/删除菜单的PHP代码,以及使用树状结构显示菜单的实现方式。
摘要由CSDN通过智能技术生成

就我个人而言,并不喜欢把相关菜单写死在页面中,我一直是把后台的相关管理命令菜单写入数据,然后缓存在服务器上来,这样修改时比较方便

好的直接上代码


在菜单的列表页面,因为要显示菜单的上下级关系,所以用了树状显示(我是用PHP来实现的,可换成JS),代码如下

    // 菜单首页
    public function index()
    {
        $result = zcache('menu');
        $tree = new \zzcms\util\Tree();
        $tree->icon = ['   │ ', '   ├─ ', '   └─ '];
        $tree->nbsp = '   ';
        foreach ($result as $r) {
            $r['str_manage'] = '<div class="layui-btn-group"><a class="layui-btn layui-btn-normal publish" data-url="' . url("publish", array("id" => $r['id'], 'menuid' => $this->menuid)) . '">修改</a>';
            $r['str_manage'] .= '<a class="layui-btn layui-btn-danger delete" data-id="' . $r['id'] . '">删除</a></div>';
            $r['display'] = $r['display'] ? "<i class=\"layui-icon icon_style\"></i> " : "<i class=\"layui-icon icon_style\">ဇ</i> ";
            $array [] = $r;
        }
        $tree->init($array);
        $str = "<tr id='tr\$id'>
                    <td><input name='listorders[\$id]' type='text' size='1' value='\$listorder' class='layui-input'></td>
                    <td>\$id</td>
                    <td>\$spacer\$name</td>
                    <td>\$controller/\$action</td>
                    <td>\$display</td>
                    <td>\$str_manage</td>
                 </tr>";

        $categorys = $tree->get_tree(0, $str);
        $this->assign("categorys", $categorys);
        return $this->fetch();
    }


添加修改菜单代码如下:

// 添加菜单
    public function publish()
    {
        if ($this->request->isPost()) {
            $post = $this->request->param();
            if (empty($post)) {
               $this->error('数据不能为空');
            }
            //验证  唯一规则: 表名,字段名,排除主键值,主键名
            $validate = new \think\Validate([
                ['name', 'require', '名称不能为空'],
                ['app', 'require', '模块名不能为空'],
                ['controller', 'require', '文件名不能为空'],
                ['action', 'require', '方法名不能为空'],
            ]);
            //验证数据合法性
            if (!$validate->check($post)) {
                $this->error('提交失败:' . $validate->getError());
            }
            $id = isset($post['id']) ? intval($post['id']) : 0;
            if ($id < 1) {
                $status = $this->model->addData($post);
            } else {
                $status = $this->model->editData($post);
            }
            if ($status) {
                $this->success('操作成功', url('index'));
            } else {
                $this->error($this->model->getError());
            }
        } else {
            $id = $this->request->has('id') ? $this->request->param('id', 0, 'intval') : 0;
            $info = [];
            if ($id > 0) {
                $info = Db::name('menu')->find($id);
            } else {
                $info['parentid'
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值