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
ngoc_viet08 viết 13:39 ngày 10/10/2018
menu đa cấp
duyanhgamer viết 13:41 ngày 10/10/2018
mình không nói về css mà mình nói về php và mysql, định làm web bán hàng chẳng hạn thì cách tổ chức bảng trong csdl như thế nào?
hoctin.net viết 13:36 ngày 10/10/2018
bác tham khảo dưoii đây php em chịu
hoctin.net viết 13:41 ngày 10/10/2018
http://www.ddth.com/showthread.php/3...u-the-nao.html
haicop viết 13:40 ngày 10/10/2018
Bác tham khảo code menu trái của em nhé,menu đệ quy nhưng query ra hết trước rồi đệ quy mảng nên tốc độ đừng hỏi. Có nhiều tham số linh tinh chưa gọt đc bác tự gọt nhé.

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>';
?>
nichie viết 13:43 ngày 10/10/2018
về lý thuyết mà nói thì trong csdl bảng category bạn chỉ cần định nghĩa 3 trường là id, name, parentid.
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
...
iBase.com.vn viết 13:41 ngày 10/10/2018
bổ sung thêm path để chỉ ra đường dẫn của node con luôn
tiendungdk viết 13:42 ngày 10/10/2018
Mình cũng đã từng làm cái này rồi.
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.
luuanhquyen viết 13:31 ngày 10/10/2018
Chỉ sử dụng duy nhất 1 bảng.

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.
Bài liên quan
0