AdminLTE是一个基于Bootstrap的免费开源的Admin Dashboard模板。AdminLTE提供了一整套的界面组件和插件,能快速开发一个现代化、响应式并且高度可定制的后台管理系统。
构造动态菜单栏方法
AdminLTE的菜单栏是由HTML和CSS来实现的,可以通过JavaScript代码动态地构造菜单栏。菜单栏被放在<aside class="main-sidebar">
元素中,每个菜单项都由一个<a>
元素加上一个<i>
元素来表示。当点击某个菜单项时,会显示对应的子菜单。
- 通过JSON数据来构造菜单栏
可以通过JSON数据对象来构造菜单栏。这个JSON对象通常包括一个菜单项的名称、URL、图标和它的子菜单。下面是一个示例的JSON数据:
var menuData = [
{
"name": "Dashboard",
"icon": "fa fa-dashboard",
"children": []
},
{
"name": "Charts",
"icon": "fa fa-pie-chart",
"children": [
{
"name": "ChartJs",
"url": "#",
"icon": "fa fa-circle-o"
},
{
"name": "Morris",
"url": "#",
"icon": "fa fa-circle-o"
}
]
},
{
"name": "Tables",
"icon": "fa fa-table",
"children": [
{
"name": "Simple",
"url": "#",
"icon": "fa fa-circle-o"
}
]
}
];
上面的代码定义了一个包含三个菜单项的JSON对象。其中每个菜单项都包括一个名称、一个图标和它的子菜单。如果某个菜单项没有子菜单,子菜单字段应该为空的数组。
然后,我们可以编写JavaScript代码来动态地生成HTML结构:
$.each(menuData, function(index, item) {
var menuItem = '<li class="treeview">';
if (item.children.length > 0) {
menuItem += '<a href="#"><i class="' + item.icon + '"></i> <span>' + item.name + '</span><i class="fa fa-angle-left pull-right"></i></a>';
menuItem += '<ul class="treeview-menu">';
$.each(item.children, function(i, child) {
menuItem += '<li><a href="' + child.url + '"><i class="' + child.icon + '"></i> ' + child.name + '</a></li>';
});
menuItem += '</ul></li>';
} else {
menuItem += '<a href="' + item.url + '"><i class="' + item.icon + '"></i> <span>' + item.name + '</span></a></li>';
}
$('.sidebar-menu').append(menuItem);
});
上面的代码会遍历JSON数据对象并动态地创建菜单栏HTML。通过调用append()
函数将菜单项添加到.sidebar-menu
元素中。
- 通过AJAX异步请求来构造菜单栏
另一种构造菜单栏的方法是通过AJAX异步请求来获取菜单栏数据。这可以实现更灵活的菜单栏,因为数据可以来自于服务器端或者前端API等。
首先,我们需要在服务器端创建一个API来返回菜单栏数据。下面是一个示例代码:
<?php
$menuData = array(
array(
"name" => "Dashboard",
"icon" => "fa fa-dashboard",
"children" => array()
),
array(
"name" => "Charts",
"icon" => "fa fa-pie-chart",
"children" => array(
array(
"name" => "ChartJs",
"url" => "#",
"icon" => "fa fa-circle-o"
),
array(
"name" => "Morris",
"url" => "#",
"icon" => "fa fa-circle-o"
)
)
),
array(
"name" => "Tables",
"icon" => "fa fa-table",
"children" => array(
array(
"name" => "Simple",
"url" => "#",
"icon" => "fa fa-circle-o"
)
)
)
);
echo json_encode($menuData);
?>
上面的代码会返回一个与前面的JSON数据格式相同的菜单栏数据。
然后,我们需要编写JavaScript代码来通过AJAX异步请求这个API获取菜单栏数据:
$.ajax({
url: "menu.php",
dataType: 'json',
success: function(data) {
$.each(data, function(index, item) {
var menuItem = '<li class="treeview">';
if (item.children.length > 0) {
menuItem += '<a href="#"><i class="' + item.icon + '"></i> <span>' + item.name + '</span><i class="fa fa-angle-left pull-right"></i></a>';
menuItem += '<ul class="treeview-menu">';
$.each(item.children, function(i, child) {
menuItem += '<li><a href="' + child.url + '"><i class="' + child.icon + '"></i> ' + child.name + '</a></li>';
});
menuItem += '</ul></li>';
} else {
menuItem += '<a href="' + item.url + '"><i class="' + item.icon + '"></i> <span>' + item.name + '</span></a></li>';
}
$('.sidebar-menu').append(menuItem);
});
}
});
上面的代码会使用jQuery的$.ajax()
方法向menu.php
地址发送一个GET请求,并将返回的JSON数据解析为JavaScript对象。然后使用$.each()
方法遍历对象并动态地创建菜单栏HTML。
示例说明:
(1)使用JSON数据构造动态菜单栏
假设我们需要为管理后台添加三个菜单项:“首页”,“分类管理”,“文章管理”,并且分类管理和文章管理下还包含子菜单,我们就可以构造下面这个JSON数据:
var menuData = [
{
"name": "首页",
"icon": "fa fa-home",
"url": "/admin/home",
"children": []
},
{
"name": "分类管理",
"icon": "fa fa-folder",
"children": [
{
"name": "添加分类",
"url": "/admin/category/add",
"icon": "fa fa-plus-circle"
},
{
"name": "分类列表",
"url": "/admin/category/list",
"icon": "fa fa-list"
}
]
},
{
"name": "文章管理",
"icon": "fa fa-file-text",
"children": [
{
"name": "添加文章",
"url": "/admin/article/add",
"icon": "fa fa-plus-circle"
},
{
"name": "文章列表",
"url": "/admin/article/list",
"icon": "fa fa-list"
}
]
}
];
然后,我们可以按照前面提到的方式,使用JavaScript代码动态地构造菜单栏HTML。
(2)使用AJAX异步请求构造动态菜单栏
假设我们需要从服务器端获取菜单栏数据,我们可以创建一个PHP文件,返回与前面示例中的JSON数据格式相同的数据。假设PHP文件的名称是menu.php
,那么我们可以使用以下JavaScript代码:
$.ajax({
url: "menu.php",
dataType: 'json',
success: function(data) {
$.each(data, function(index, item) {
var menuItem = '<li class="treeview">';
if (item.children.length > 0) {
menuItem += '<a href="#"><i class="' + item.icon + '"></i> <span>' + item.name + '</span><i class="fa fa-angle-left pull-right"></i></a>';
menuItem += '<ul class="treeview-menu">';
$.each(item.children, function(i, child) {
menuItem += '<li><a href="' + child.url + '"><i class="' + child.icon + '"></i> ' + child.name + '</a></li>';
});
menuItem += '</ul></li>';
} else {
menuItem += '<a href="' + item.url + '"><i class="' + item.icon + '"></i> <span>' + item.name + '</span></a></li>';
}
$('.sidebar-menu').append(menuItem);
});
}
});
上面的代码会从服务器端获取菜单栏数据,并使用jQuery的$.each()
方法遍历对象并动态地创建菜单栏HTML。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:adminlte简介及构造动态菜单栏方法 - Python技术站