10/10/2018, 10:28
Làm Menu Đa Cấp...help me!
Mình đang làm cái menu theo dạng đa cấp, tức là cứ click vào gốc thì sinh ra con, click vào con thì sinh ra con nữa...rồi cứ tiếp tục cho ra vài con nữa...Nhưng ở đây mình phải dùng PHP lấy từ Database ra, mình làm mãi mà chưa được? các bạn giúp mình với????
Thanks nhìu nhìu...
Thanks nhìu nhìu...
Bài liên quan
basic table nhé :
+menu table :
structure : menu_id - name- link -parent_id
menu_id : id của menu
name : tên của menu ví dụ : Home , About , Contact...
link : url của menu ví dụ : http://mysite.com/ , http://mysite.com/about/...
parent_id : id của menu cha ( mẹ ). 0 là menu ko cha ko mẹ
tạo table :
CREATE TABLE `menus`.`menu` (
`menu_id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 255 ) NOT NULL ,
`link` VARCHAR( 255 ) NOT NULL ,
`parent_id` INT NOT NULL ,
PRIMARY KEY ( `menu_id` )
)
INSERT INTO `menus`.`menu` (
`menu_id` ,
`name` ,
`link` ,
`parent_id`
)
VALUES (
NULL , 'home', 'http://mysite.com/', '0'
), (
NULL , 'about', 'http://mysite.com/about', '0'
), (
NULL , 'blog', 'http://mysite.com/blog', '0'
), (
NULL , 'first blog', 'http://mysite.com/blog/first-blog', '3'
), (
NULL , 'contact', 'http://mysite.com/contact', '0'
);
$result=mysql_query('select * from menu ');
if (mysql_num_rows($result)>0){
$menus = change_result_to_array($result)
}
function change_result_to_array($result){
if (mysql_num_rows($result)<>0){
$new_array=array();
$num=0;
while ($row=mysql_fetch_array($result)){
$new_array***91;$num***93;=$row;
$num++;
}
return $new_array;
}
else{
return false;
}
}
var_dump($menus);
- đầu tiên ta list ra các menu ko có parent = function foreach_child .
- function foreach_child có nhiệm vụ tìm trong mảng ra những menu nào có parent_id bằng $id ( ban đầu là 0 ) ( giống như tìm con )
- trong quá trình list mỗi menu trên ra , nó sẽ foreach_child 1 lần nữa để tìm kiếm các child của nó .
- quá trình cữ diễn ra như thế .
$menu_html='';
foreach_child(0,$menus,$level,$menu_html);
echo $menu_html;
function foreach_child($id,$data,$level,&$html){
$html.='<ul>';
foreach($data as $data_id =>$item){
if ($item***91;'parent_id'***93;==$id){
$html.='<li><a href="'.$item***91;'link'***93;.'">'.$item***91;'name'***93;.'</a>';
unset($data***91;$data_id***93;);
foreach_child($item***91;'menu_id'***93;,$data,$level,$html);
$html.='</li>';
}
}
$html.='</ul>';
}
all code :
<?php
$db=mysql_connect("localhost","root","");
if (! $db)
{
echo " Không thể kết nối CSDL lúc này ! ";
exit;
}
mysql_select_db("menus");
mysql_query("SET NAMES 'utf8'");
$result=mysql_query('select * from menu ');
if (mysql_num_rows($result)>0){
$menus = change_result_to_array($result) ;
}
//var_dump($menus);
$menu_html='';
foreach_child(0,$menus,$level,$menu_html);
echo $menu_html;
function change_result_to_array($result){
if (mysql_num_rows($result)<>0){
$new_array=array();
$num=0;
while ($row=mysql_fetch_array($result)){
$new_array***91;$num***93;=$row;
$num++;
}
return $new_array;
}
else{
return false;
}
}
function foreach_child($id,$data,$level,&$html){
$html.='<ul>';
foreach($data as $data_id =>$item){
if ($item***91;'parent_id'***93;==$id){
$html.='<li><a href="'.$item***91;'link'***93;.'">'.$item***91;'name'***93;.'</a>';
unset($data***91;$data_id***93;);
foreach_child($item***91;'menu_id'***93;,$data,$level,$html);
$html.='</li>';
}
}
$html.='</ul>';
}
?>
Table menu của mình là cate_sp: có id,parent,name.
Lúc mình rê chuột vào menu thì nó chỉ sô ra 2 cấp, bây h mình muốn thêm cấp 3,4...Nhưng làm mãi không được bạn à?
[=========> Bổ sung bài viết <=========]
Bạn giảng lại giùm mình cái hàm foreach_child($id,$data,$level,&$html),cảm ơn bạn ngoc_viet08 nhìu nhìu...
ù thì 20 ký tự nè