10/10/2018, 11:27
mình muốn làm web có menu đa cấp thì làm như thế nào ở csdl vậy?
ví dụ như mình làm trang muaban chẳng hạn có 3 thư mục mẹ là điện thoại di động,máy tính,xe máy
trong điện thoại di động lại có nokia,samsung...máy tính có xách tay,để bàn....xe máy có honda,yamaha.....
xin các anh chỉ giáo ạk
trong điện thoại di động lại có nokia,samsung...máy tính có xách tay,để bàn....xe máy có honda,yamaha.....
xin các anh chỉ giáo ạk
Bài liên quan
Bảng sql thì có các cột chính sau : id, name,luonmorong,parent
Menu con sẽ có parent là id của menu mẹ,cứ thế đệ quy sẽ không hạn chế số cấp
<?php
$tu_mo_rong=0;
global $gh;
global $id;
global $html;
global $array;
global $array_id;
global $parent_id;
global $tuychon;
global $luonmorong;
$id=0;
$sql='select * from danhmuc where and published=1 order by orderby desc,id desc';
$row=$this->get_row($sql);
if(sizeof($row)>0)
{
foreach($row as $r)
{
$array[$r['parent']][$r['id']]=array('id'=>$r['id'],'parent'=>$r['parent'],'name'=>$r['name'],'cap'=>0,'published'=>$r['published'],'kieuhienthi'=>$r['kieuhienthi']);
$luonmorong[$r['id']]=$r['luonmorong'];
$array_id[$r['id']]=$r['parent'];
}
}
$current_parent= $array_id[$id];
function get_parent_id_array_menu($id)
{
global $parent_id;
global $array_id;
$parent= $array_id[$id];
if($parent!=0)
{
get_parent_id_array_menu($parent);
$parent_id[]=$parent;
}
}
function create_array_tree_menu($parent,$object)
{
global $gh;
global $html;
global $array;
global $parent_id;
global $lvl;
global $id;
global $tuychon;
global $luonmorong;
$lvl++;
if(sizeof($array[$parent])>0)
{
foreach($array[$parent] as $key=>$r)
{
if(in_array($parent,$parent_id) or $luonmorong[$parent]==1)
{
if($r['id']==$id)
{
$dachon="lvl".$lvl."_menutrai_selected";
}else{
$dachon='';
}
$seo=$object->to_seo_url($r['name']);
$global_seo=$object->to_seo_url($GLOBALS['config']['seo']);
if(trim($global_seo==''))$global_seo='danh-sach';
$html.= '<div class="lvl'.$lvl.'_menutrai '.$dachon.'"><a '.$style.' href="sp/'.$global_seo.'/'.$r['id'].'/v='.$r['kieuhienthi'].'/'.$seo.'.html">'.$r['name'].'</a></div>
<div class="lvl'.$lvl.'_menutrai_sp"></div>
';
create_array_tree_menu($r['id'],$object);
$lvl--;
}
}
}
}
$parent_id[]=0;
$parent_id[]=$id;
get_parent_id_array_menu($id);
create_array_tree_menu(0,$this);
$caidat.='<div class="menu_trai_child_box">';
$caidat.='<div class="menu_trai">
<ul>';
$caidat.=$html;
$caidat.='
</ul>
</div>
';
$caidat.='<div class="boxtrai_chan menu_trai_chan"><span><label></label></span></div></div>';
if($koco==1)$menu='';
$caidat.=$menu;
return '<div class="box_menu_trai">
'.$caidat.'</div>';
?>
Khi đấy thằng nào là gốc thì để id=0, parentid=-1
Còn lại cứ theo parentid mà chiến.
Sau đấy thì thêm một số trường phục vụ việc khác như:
+) publish: ẩn/hiện
+) alias, key, des, title để làm SEO
+) nếu chỉ có parentid thì chỉ truy vấn ngược được là nó là con của thằng nào. Nên có thể thêm 1 trường là id các con của nó để tìm xuôi cho nhanh. Mỗi lần thêm 1 thằng con thì lại update trường này cho thằng cha
...
bạn tạo cơ sở dữ liệu
bảng menu (menu_id, menu_title)
bảng submenu(submenu_id, menu_id, submenu_title)
$menu = mysql_query("SELECT * FROM menu");
if($menu && mysql_num_rows($menu)>0){
while($r_menu = mysql_fetch_aray($menu)){
$submenu= mysql_query("SELECT * FROM submenu WHERE menu_id='".$r_menu['menu_id']."'");
if($submenu && mysql_num_rows($submenu)>0){
echo r_menu['menu_title'];
while($r_submenu = mysql_fetch_array($submenu)){
echo ['submenu_title'];
}
}
}
}
đây là cơ bản dành cho newmember lever PHP căn bản.
MENU_ID
PARENT_ID
MENU_NAME
đơn giản vậy thôi. Lấy ra hệ thống Menu có thể dùng đệ quy, vì chả biết 1 menu kết thúc ở mức nào.