ساخت منو و زیر منو

این تاپیک 7 پاسخ و 2 مشارکت کننده دارد . آخرین آپدیت توسط :  lili ،‏ 2 سال و 3 ماه پیش .

این تاپیک تاکنون 1507 بازدید داشته است .

نویسنده پست
پنجشنبه ، 14 آگوست 2014     2:24 ق.ظ #


lili

Subscriber
184 پست38 تاپیک

سلام:

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

دوتا جدول توی دیتابیسم درست کردم یکی به نام menu برای نام و آیدی منوی های اصلی و یکی به نام sub_menu برای منوهای زیر مجموعه و یک فیلد مشترک توی هردوتای این جدول قرار دادم به اسم menu_id که بتونم باهاش تعیین کنم که کدوم زیرمنو برای کدوم منوی اصلیه فیلدهای جدولهام اینا هستن:

menu:

menu_id

menu

و جدول زیر منوهام : sub_menu

subid

sub_menu

menu_id

link

فیلد لینک لینک صفحه اییه که قبلا ساخته شده و از جدول content فراخونی میشه

برای اینکه یه منو ایجاد کنم جدول زیر و درست کردم:

<form method="post">
<div id="right">
<div id="question"> منوی اصلی</div>
<div id="question">نام زیر منو</div>
<div id="question">نام صفحه</div>

</div>
<div id="left">
<input type="text" id="mname" name="mname" class="inpu" />
<input type="text" id="sub" name="sub" class="inpu" />
<br/>
<select class="inpu" name="link" id="link">
<?php
while($rowmenu=mysql_fetch_assoc($sqlmenu)){
echo"<option name='pgname' id='pgname' value='{$rowmenu['id']}'>{$rowmenu['pgname']}</option>";
}
?>
</select>

<br/><br/>
<input type="submit" name="creatsub" id="creatsub" value=" ارسال " class="btn"/>
</div>

</form>

و با کدهای زیر به دیتابیس فرستادم:

function creatmenu(){

if(isset($_POST['creatsub'])){
$parent=$_POST['mname'];
mysql_query("INSERT INTO `menu` (`menu`)VALUES('$parent')")or die(mysql_error());
$menuquery=mysql_query("SELECT * FROM `menu`");
while($rowmenu=mysql_fetch_assoc($menuquery)){
$child1=$_POST['sub'];
$url=$_POST['link'];
$menu_id=$rowmenu['menu_id'];}

mysql_query("INSERT INTO `sub_menu` (`sub_menu`,`menu_id`,`link`)VALUES('$child1','$menu_id','$url') ")or die(mysql_error());

}
}

مشکلم زمانیه که دارم این منوها و فراخوانی میکنم منوی اصلی و نشون میده ولی توی نشون دادن زیر منوها پیغام خطا میده . به صورت زیر منو و فراخوانی کردم :

<div id="navigation">
<ul>
<li>
<a rel="nofollow" href="#" id="department">
دپارتمان های شرکت
<ul id="child">
<?php
$sqlmenu=mysql_query("SELECT * FROM `menu`");
while($rowmenu = mysql_fetch_assoc($sqlmenu)){
?>
<li id="p">
<?php echo $rowmenu['menu'];?>
<ul id="chi">
<?php
$rowmenu = mysql_fetch_assoc($sqlmenu);
$subquery = mysql_query("SELECT * FROM `sub_menu` WHERE `menu_id`=".$rowmenu['menu_id']." ");
while($rowsub= mysql_fetch_assoc($subquery)){
?>
<li>
<a rel="nofollow" href="?url=<?php echo $rowsub['link'];?>"> <?php echo $rowsub['sub_menu']; ?> </a>
</li>
<?php } ?>
</ul>

</li>
<?php }?>
</ul>
</a>
</li>

</ul>
</div>

خط 105 کدم که ایراد میگیره مربوط به کد while($rowsub= mysql_fetch_assoc($subquery)){

تگ a هم مشکل دار شده همون تگی که لینک زیرمنوهاست ولی نمیدونم مشکلش چیه این پیغام و میده:

marked invalid becauseit dosent belong inside the tag its in.

یه مسئله ی دیگه اینکه فکر کنم من با این روش فقط بتونم برای هر منو یک زیر منو تعریف کنم چطور میتونم بیشتر از یک زیرمنو برای هر یک از منوهای اصلیم داشته باشم؟

پیوست ها:
You must be logged in to view attached files.
0  تشکر
پنجشنبه ، 14 آگوست 2014     10:19 ق.ظ #


کیوان علی محمدی

Authorplus
VIP
1792 پست4 تاپیک

سلام،فکر میکنم بهتره برای تولید منوهای داینامیک روش بهتری رو انتخاب کنید،این روش شما عولاه بر کوئری های زیاد به دیتابیس کدهای زیادی هم داره که اصلا بهینه نیست،فقط باید یه جدول ایجاد کنید (نه دو تا) و برای هر سطر یه فیلد به نام parent_id ایجاد کنید و مشخص کنید کدوم زیر منو هست و کدوم منوی ریشه،با یا تابع که به صورت بازگشتی اجرا میشه میتونید به راحتی منو رو تولید کنید.

توی گوگل سرچ کنید create dynamic menu with php

0  تشکر
پنجشنبه ، 14 آگوست 2014     6:48 ب.ظ #


lili

Subscriber
184 پست38 تاپیک

قبلا یه جدول با چهارتا فیلد درست کرده بودم ولی نتونستم برای هر منو بیسشتر از یه زیر منو تعیین کنم . سرچ کردم ولی متوجه نشدم اگه بخوام یه جدول داشته باشم وقتی که بخوام یه منو و بسازم فرمم باید به چه صورت باشه در صورتیکه بخوام چندتا زیر منو داشته باشه؟

این و میدونم که ارتباط زیر منو با منوی اصلی با آیدی هاشونه ولی اینکه چطوره چندتا زیر منو داشته باشم که آیدی ها به درستی وارد بشه و نمیدونم

0  تشکر
پنجشنبه ، 14 آگوست 2014     7:41 ب.ظ #


lili

Subscriber
184 پست38 تاپیک

وقتی یه جدول داشته باشم که ترکیب این دوتا جدول الانم باشه زمانیکه از طریق پنل بخوام یه منو درست بکنم که به طور مثال 3 تا زیرمنو داشته باشه چطوری باید insert کنم که آیدی ها درست وارد بشه و فیلدها چطوری باید وارد دیتابیس بشه

اگه میشه فرم وارد کردن منو و زیر منو و نحوه  insert کردنش و بهم بگید ممنون

0  تشکر
شنبه ، 16 آگوست 2014     12:39 ب.ظ #


lili

Subscriber
184 پست38 تاپیک

من جدول و تونستم درست کنم الان وقتی منویی وارد جدول میشه sub menu آیدی برابر با منوی اصلی داره ولی حالا یه مشکلی که پیش اومده موقع نمایش دادن تمامی منوهای اصلی و نشون میده ولی زیر منوها فقط اولین منوی اصلی توی جدول دیتابیسم و نشون میده بقه ی زیر منوهای دیگه رو نشون نمیده فکر کردم مشکل از while که جای درستی قرار ندادم ولی هر جا میذارم بازم زیر منوهای منوهای سطرهای دوم به بعد دیتابیسم و نشون نمیده

این کد فراخوانیمه:

<div id="navigation">
<ul>
<li>
<a rel="nofollow" href="#" id="department">
دپارتمان های شرکت
<ul id="child">
<?php
$sqlmenu=mysql_query("SELECT * FROM `menu` WHERE `menu`!='' ");
while($rowmenu = mysql_fetch_assoc($sqlmenu)){
?>
<li id="p">
<?php echo $rowmenu['menu'];?>
<?php

$subquery = mysql_query("SELECT * FROM `menu` WHERE `subid`=".$rowmenu['id']." ");
while($rowsub= mysql_fetch_assoc($subquery)){
?>
<ul id="chi">

<li>
<?php echo  $rowsub['sub_menu'] ;?>
</li>

</ul>
<?php } ?>
</li>
<?php }?>
</ul>
</a>
</li>
<li><a rel="nofollow" href="#">دانلود نرم افزار</a></li>
<li><a rel="nofollow" href="online-price.php">قیمت آنلاین</a></li>
<li><a rel="nofollow" href="#">مطالب آموزشی</a></li>
</ul>
</div>

ممنون میشم راهنماییم کنید

0  تشکر
دوشنبه ، 18 آگوست 2014     1:08 ق.ظ #


lili

Subscriber
184 پست38 تاپیک

جای while و تغییر دادم (دومین while و ) و فقط li و درون وایل گذاشتم ولی بازم فقط زیر منوی اولین منو و نشون میده دوستان اگه کسی میتونه ایراد کدم و بهم بگه خیلی ممنون میشم.

<div id="navigation">
<ul>
<li>
<a rel="nofollow" href="#" id="department">
دپارتمان های شرکت
<ul id="child">
<?php
$sqlmenu=mysql_query("SELECT * FROM `menu` WHERE `menu`!='' ");
while($rowmenu = mysql_fetch_assoc($sqlmenu)){
?>
<li id="p">
<?php echo $rowmenu['menu'];?>

<ul id="chi">
<?php

$subquery = mysql_query("SELECT * FROM `menu` WHERE `subid`=".$rowmenu['id']." ");
while($rowsub= mysql_fetch_assoc($subquery)){
echo "<li>". $rowsub['sub_menu']."</li>";
} ?>
</ul>

</li>
<?php }?>
</ul>
</a>
</li>
<li><a rel="nofollow" href="#">دانلود نرم افزار</a></li>
<li><a rel="nofollow" href="online-price.php">قیمت آنلاین</a></li>
<li><a rel="nofollow" href="#">مطالب آموزشی</a></li>
</ul>
</div>

0  تشکر
دوشنبه ، 18 آگوست 2014     9:35 ق.ظ #


کیوان علی محمدی

Authorplus
VIP
1792 پست4 تاپیک

این روش شما مناسب نیست،به نظرم همون روش شناسه والد رو پیگیری کنید،این روش باعث میشه شما برای هر زیر منو یه کوئری جدید ایجاد کنید که این اصلا صحیح نیست بعدشم دو تا جدول برای ساختار منوبه این شکل یه نوع افزونگی در دیتابیس محسوب میشه که بهینه سازی رو کاهش میده.

0  تشکر
دوشنبه ، 18 آگوست 2014     4:12 ب.ظ #


lili

Subscriber
184 پست38 تاپیک

خب این روش والد چطوریه؟ گفتید سرچ کنم سرچ کردم بعضی از سایت ها و  که اصلا  متوجه نشدم و از آرایه استفاده کرده بود منم همه ی منو ها وزیر منوهام و توی یه جدول گذاشتم آیدی هر زیر منوم برابر آیدی منوی اصلیه جطوری باید فراخونی کنم ؟

من توی سایتهایی که سرچ کردم یا با آرایه ها کار کرده بود که متوجه نشدم یا اینکه همینطوری دوتا کوئری از یه جدول گرفته بود

اگه یه نمونه ی فرضی از روشی که میگید و بذارید متوجه میشم من عکسی از دیتابیسم میذارم که منوها چطور وارد شده

 

پیوست ها:
You must be logged in to view attached files.
1  تشکر
پست 1 تا 8 (از مجموع 8 پست)

برای پاسخ دادن به این تاپیک باید وارد سایت شوید .