在原生垂直導(dǎo)航的基礎(chǔ)上,添加了異步加載模式和簡單的事件處理,簡單易用、異步。
<div id="hxNavbar"></div>二、JS
layui.extend({
hxNav: '../jslibs/layui/extend/hxNav' // 根據(jù)你自己的目錄設(shè)置
}).use(['element','hxNav'],function(){
layui.hxNav({
element: '#hxNavbar', // 必須,指定ID
url: 'system/getMenuNavbar.php', // 請求后臺數(shù)據(jù)的接口
type: 'post',
shrink: false,
onSelect: function(v) {
console.log(v);
}
});
});
layui.hxNav('select', id );注意:通過這個方法選擇節(jié)點時,仍然會觸發(fā)組件的onSelect事件!
<?php上面例子中,關(guān)于sql語句中的isMenuHasChild,是一個自己寫的mysql函數(shù),原理如下:
$pid = empty($_POST['id'] ) ? null : $_POST['id']; // 前端發(fā)來的請求,表明了現(xiàn)在要請求哪一個節(jié)點的孩子,請求根節(jié)點時,這個參數(shù)為空
$pdo = new MyPDO(); // pdo連接到mysql
$arrParams = array();
if( empty( $pid ))
$whereParent = 'pi IS NULL';
else {
$whereParent = 'pi=:pi';
$arrParams[':pi'] = $pid;
}
$stm = $pdo->prepare("SELECT id,nm AS text,ic AS icon,isMenuHasChild(id) AS hasChildren,hr AS href FROM sy_menu WHERE {$whereParent} ORDER BY st");
$stm->execute($arrParams);
$result = $stm->fetchAll(PDO::FETCH_ASSOC);
echo json_encode( $result, JSON_UNESCAPED_UNICODE );
-- menu表結(jié)構(gòu):
DROP TABLE IF EXISTS `sy_menu`;
CREATE TABLE sy_menu(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`pi` int(11) DEFAULT NULL COMMENT 'parent id',
`st` int(11) NOT NULL DEFAULT 0 COMMENT 'sort',
`nm` varchar(128) DEFAULT NULL COMMENT 'name',
`ic` varchar(64) DEFAULT NULL COMMENT 'icon',
`hr` varchar(256) DEFAULT NULL COMMENT 'href',
PRIMARY KEY (`id`),
KEY(`hr`),
CONSTRAINT `menu_self_p` FOREIGN KEY (`pi`) REFERENCES sy_menu(`id`) ON UPDATE CASCADE ON DELETE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'menus';
-- 自定義的小函數(shù),用來獲取某個id是否具有孩子節(jié)點。
DELIMITER ;;
CREATE FUNCTION `isMenuHasChild`( inid INT ) RETURNS int(11)
RETURN ( SELECT count(`id`) FROM `sy_menu` WHERE `pi`=inid );;
DELIMITER ;
該擴展組件由第三方用戶主動投遞,并由其自身進行維護,本站僅做收集。