· 7 years ago · Feb 09, 2019, 02:54 PM
1CREATE TABLE IF NOT EXISTS sys_menu (
2 menu_code varchar(16) COLLATE utf8_unicode_ci NOT NULL,
3 menu_name varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
4 menu_link varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
5 PRIMARY KEY (menu_name)
6) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
7
8
9INSERT INTO sys_menu (menu_code, menu_name, menu_link) VALUES
10('01', 'setting', NULL),
11('01.01', 'admin', NULL),
12('01.01.01', 'add', 'add.php'),
13('01.01.02', 'edit', 'edit.php');
14
15<ul>
16 <li><a href="">Setting</a>
17 <ul>
18 <li><a href="">Admin</a>
19 <ul>
20 <li><a href="add.php">Add</a></li>
21 <li><a href="edit.php">Edit</a></li>
22 </ul>
23 </li>
24 </ul>
25 </li>
26 </ul>
27
28$listData[]=array('menu_code' => '01','menu_name' => 'setting', 'menu_link' => null);
29$listData[]=array('menu_code' => '01.01','menu_name' => 'admin', 'menu_link' => null);
30$listData[]=array('menu_code' => '01.01.01','menu_name' => 'add', 'menu_link' =>'add.php');
31$listData[]=array('menu_code' => '01.01.02','menu_name' => 'edit', 'menu_link' => 'edit.php');
32$listData[]=array('menu_code' => '02','menu_name' => 'people', 'menu_link' => null);
33$listData[]=array('menu_code' => '02.01','menu_name' => 'people_edit', 'menu_link' => 'edit.php');
34$listData[]=array('menu_code' => '02','menu_name' => 'people', 'menu_link' => null);
35
36function createListMenu($listData){
37 $str ='<ul>';
38 $lastListLevel=0;
39 $firstRow=true;
40
41 foreach($listData as $row){
42 $currentListLevel=count(explode('.',$row['menu_code'])) -1 ; // minus one to correct level to Level 0
43 $differenceLevel=$currentListLevel-$lastListLevel;
44
45 // deal with the link
46 $hrefValue = is_null($row['menu_link']) ? '' : $row['menu_link'];
47 $rootLevel=false;
48
49 if($differenceLevel==0){ // stay on the same list level
50 if($firstRow){
51 $firstRow=false;
52 }else{
53 $str .='</li>';
54 }
55 $str .='<li>';
56 }elseif($differenceLevel>0){ // go deeper in list level
57 for($j=0;$j<$differenceLevel;$j++){
58 $str .='<ul><li>';
59 }
60 }elseif($differenceLevel<0){ // go higher in list level
61 for($j=$differenceLevel;$j<=0;$j++){
62 if($j==0){ // root level reached
63 $rootLevel=true;
64 $str .='</li>';
65 }else{
66 $str .='</li></ul>';
67 }
68 }
69 $str .= ($rootLevel) ? '<li>' : '<ul>';
70 }
71 $str.='<a href="'.$hrefValue.'">'.$row['menu_name'].'</a>';
72 $lastListLevel=$currentListLevel;
73 }
74
75 // set end list tags
76 for($j=$lastListLevel;$j>=0;$j--){
77 $str .='</li></ul>';
78 }
79 return $str;
80}
81
82echo createListMenu($listData);
83
84<?php
85 $connection=mysql_connect(DB_Server,DB_User,User_Pass);
86 $db=mysql_select_db(DB_Name);
87 $sql="select * from sys_menu order by menu_code";
88 $res=mysql_query($sql) or die(mysql_error());
89 echo '<ul>';
90 while($row=mysql_fetch_array($res))
91 {
92 $cur=$row['menu_code'];
93 if (strlen($cur)==2)
94 {
95 echo '<li><a href="">'.$row['menu_name'].'</a><li>';
96
97 $res2=mysql_query($sql) or die(mysql_error());
98 echo '<ul>';
99 $mainpar=$cur;
100 while($row=mysql_fetch_array($res2))
101 {
102 $cur=$row['menu_code'];
103 if ((strlen($cur)==5)&&(substr($cur,0,2)==$mainpar))
104 {
105 echo '<li><a href="">'.$row['menu_name'].'</a><li>';
106 $res3=mysql_query($sql) or die(mysql_error());
107 echo '<ul>';
108 $secpar=$cur;
109 while($row=mysql_fetch_array($res3))
110 {
111 $cur=$row['menu_code'];
112 if ((strlen($cur)==8)&&(substr($cur,0,5)==$secpar))
113 {
114 echo '<li><a href="'.$row['menu_link'].'">'.$row['menu_name'].'</a><li>';
115 }
116 }
117 echo '</ul>';
118 }
119 }
120 echo '</ul>';
121 }
122 }
123 echo '</ul>';
124?>
125
126$listData[]=array('menu_code' => '01','menu_name' => 'setting', 'menu_link' => null);
127$listData[]=array('menu_code' => '01.01','menu_name' => 'admin', 'menu_link' => null);
128$listData[]=array('menu_code' => '01.01.01','menu_name' => 'add', 'menu_link' =>'add.php');
129$listData[]=array('menu_code' => '01.01.02','menu_name' => 'edit', 'menu_link' => 'edit.php');
130
131function createListMenu($listData){
132 $str ='<ul>';
133 $lastElementLevel=1;
134 $firstRow=true;
135
136 foreach($listData as $row){
137 $currentElementLevel=count(explode('.',$row['menu_code']));
138 $differenceLevel=$currentElementLevel-$lastElementLevel;
139
140 if($row['menu_link']!=null)
141 $hrefValue=$row['menu_link'];
142
143 if($differenceLevel==0){
144 if(! $firstRow)
145 $str .='</li>';
146 }elseif($differenceLevel>0){
147 for($j=0;$j<$differenceLevel;$j++){
148 $str .='<ul>';
149 }
150 }elseif($differenceLevel<0){
151 for($j=$differenceLevel;$j>0;$j--){
152 $str .='</li></ul>';
153 }
154 }
155 $str.='<li><a href="'.$hrefValue.'">'.$row['menu_name'].'</a>';
156
157 $lastElementLevel=$currentElementLevel;
158 $firstRow=false;
159 }
160
161 // set end list tags
162 for($j=$lastElementLevel;$j>0;$j--){
163 $str .='</li></ul>';
164 }
165
166 return $str;
167}
168
169echo createListMenu($listData);
170
171$listData[]=array('menu_code' => '02','menu_name' => 'people', 'menu_link' => null);
172$listData[]=array('menu_code' => '02.01','menu_name' => 'people_edit', 'menu_link' => 'edit.php');
173
174<ul>
175<li><a href="">setting</a>
176<ul>
177<li><a href="">admin</a>
178<ul>
179<li><a href="add.php">add</a></li>
180<li><a href="edit.php">edit</a>
181<li><a href="edit.php">people</a>
182<ul>
183<li><a href="edit.php">people_edit</a></li>
184</ul>
185</li>
186</ul>