PDA

View Full Version : سوال: ایجاد منو و زیر منو به تعداد دلخواه



idocsidocs
پنج شنبه 19 مرداد 1391, 15:13 عصر
چطور می تونم به کمک پی اچ پی و mysql هر تعداد منو و زیر منو که بخوام ایجاد کنم؟


می خوام منوها به این صورت در بیاین:
وسایل الکترونیک -> موبایل -> نوکیا -> n73 -> وسایل جانبی

کلا بتونم به هر تعداد که بخوام زیر منو ایجاد کنم.

MSN_Issue
پنج شنبه 19 مرداد 1391, 15:20 عصر
باید یه ساختار درختی برای منو ها در نظر بگیری ( هر منو یه فیلد پدر لازم داره)
بعد با تابع بازگشتی اونو چاپ کنی...
یه سرچ تو همین تالار بزنی فکر کنم نمونه-ش رو باشه

MMSHFE
پنج شنبه 19 مرداد 1391, 16:04 عصر
ابتدا فیلدهای زیر رو برای جدول menu توی دیتابیس درنظر بگیرین:
id از نوع int (کلید اصلی)
name از نوع varchar با طول 255
parent از نوع int
حالا شروع کنید به درج اطلاعات توی این جدول به این ترتیب که اگه یک منو، باید اصلی باشه (زیر منو نباشه)، parent رو صفر بگذارین و درغیر اینصورت parent رو برابر با id منویی بگذارین که این منو باید زیرمنوی اون منو بشه ( چی شد :لبخند: ) !
حالا با کمک تابعی شبیه تابع زیر میتونید کل منوها رو به نمایش در بیارین:


<?php
function ShowMenu($parent = 0, $level = 0) {
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
$menus = mysql_query("SELECT * FROM `menu` WHERE (`parent`='{$id}') ORDER BY `id`");
if($menus && mysql_num_rows($menus)) {
while($menu = mysql_fetch_assoc($menus)) {
echo '<p>';
for($i = 0; $i < $level; $i++) {
echo '&nbsp;&nbsp;&nbsp;';
}
echo $menu['name'] . '</p>' . PHP_EOL;
$submenus = mysql_result(mysql_query("SELECT COUNT(*) AS `total` FROM `menus` WHERE (`parent`='{$menu['id']}')"), 0, 0);
if($submenus > 0) {
ShowMenu($menu['id'], $level + 1);
}
}
mysql_free_result($menus);
}
}

ShowMenu();
?>

حالا با تغییر تابع فوق میتونید منوها رو به هر شکلی که میخواین نمایش بدین. این تابع رو در ساده ترین حالت ممکن براتون نوشتم که خودتون برحسب نیاز، اون رو سفارشی کنید.
موفق باشید.

idocsidocs
پنج شنبه 19 مرداد 1391, 16:07 عصر
مهندس یه توضیح در مورد توابعی که خودشون رو فراخوانی می کنن می دید؟

بنظرتون اینطوری تعداد کوئری ها زیاد نمی شه؟

MMSHFE
پنج شنبه 19 مرداد 1391, 16:52 عصر
درسته ولی بعضی جاها واقعاً راهی بجز توابع بازگشتی نیست. ضمناً تابعی که مثال زدم، اول چک میکنه ببینه اصلاً زیرمنویی برای منوی جاری وجود داره یا نه و اگه بود، اونوقت تابع خودش رو صدا میزنه تا زیرمنوها رو نشون بده. در مواردی مثل این مسئله که تعداد دفعات تکرار مشخص نیست، بهترین راه همون توابع بازگشتی هستن.