就我个人而言,并不喜欢把相关菜单写死在页面中,我一直是把后台的相关管理命令菜单写入数据,然后缓存在服务器上来,这样修改时比较方便
好的直接上代码
在菜单的列表页面,因为要显示菜单的上下级关系,所以用了树状显示(我是用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'