PDA

View Full Version : مشکل در منو



pasargadteam
شنبه 03 مهر 1395, 18:00 عصر
با سلام و درود بیکران

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

مثل تصویر زیر:
142747

کد PHP مربوط به ساختنش هم به شکل زیر هست:


<?php
function MenuGroups($parent = 0) {
$parent = mysql_real_escape_string($parent);
$items = mysql_query("SELECT * FROM `menus` WHERE (`parentid`='{$parent}') ORDER BY `sort`");
if ($items && mysql_num_rows($items) > 0) {
while ($item = mysql_fetch_assoc($items)) {
$count = mysql_result(mysql_query("SELECT COUNT(*) AS `count` FROM `menus` WHERE (`parentid`='{$item['ID']}')"), 0, 0);
if ($count > 0) {
echo '<li class="dropdown"><a href="#" data-toggle="dropdown" class="dropdown-toggle"> ' . $item['menu_name'] . '<span class="caret"></span></a>';
echo '<ul class="dropdown-menu" role="menu">';
MenuGroups($item['ID']);
echo '</ul>';
echo '</li>';
}else {
if ($item['menu_type'] == 1 && $item['status'] == 1){
echo '<li><a href="/page/'.$item['slug'].'.html">' . $item['menu_name'] . '</a></li>';
}elseif($item['menu_type'] == 2 && $item['status'] == 1){
echo '<li><a href="/articles/'.$item['slug'].'.html">' . $item['menu_name'] . '</a></li>';
}
}
}
mysql_free_result($items);
}
}
?>


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

142748

که کد HTML اون به شکل زیر هست:


<li class="dropdown"><a href="#" data-toggle="dropdown" class="dropdown-toggle"> منوی چند زیر منو دار <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#">منوی اول نمایشی</a></li>
<li><a href="#">منوی دوم نمایشی</a></li>
<li><a href="#">منوی سوم نمایشی</a></li>
<li class="dropdown-submenu"><a href="#">منوی چهارم نمایشی</a>
<ul class="dropdown-menu">
<li><a href="#">منوی اول نمایشی</a></li>
<li class="dropdown-submenu"><a href="#">منوی دوم نمایشی</a>
<ul class="dropdown-menu">
<li><a href="#">منوی اول نمایشی</a></li>
<li><a href="#">منوی دوم نمایشی</a></li>
<li><a href="#">منوی سوم نمایشی</a></li>
</ul>
</li>

</ul>
</li>
</ul>
</li>




و یا به شکل مگا بسازمش به شکل زیر:

142749

که کد HTML اون به این شکل هست:


<li class="dropdown pscoltd-fw"><a href="#" data-toggle="dropdown" class="dropdown-toggle"> مگا منو <b class="caret"></b></a>
<ul class="dropdown-menu fullwidth">
<li class="pscoltd-content withdesc">
<div class="row">
<div class="col-sm-2">
<h3 class="title">- دسته اول نمایشی</h3>
<ul>
<li><a href="#">منوی اول نمایشی</a></li>
<li><a href="#">منوی دوم نمایشی</a></li>
<li><a href="#">منوی سوم نمایشی</a></li>
</ul>
</div>

<div class="col-sm-2">
<h3 class="title">- دسته دوم نمایشی</h3>
<ul>
<li><a href="#">منوی اول نمایشی</a></li>
<li><a href="#">منوی دوم نمایشی</a></li>
<li><a href="#">منوی سوم نمایشی</a></li>
</ul>
</div>

<div class="col-sm-2">
<h3 class="title">- دسته سوم نمایشی</h3>
<ul>
<li><a href="#">منوی اول نمایشی</a></li>
<li><a href="#">منوی دوم نمایشی</a></li>
<li><a href="#">منوی سوم نمایشی</a></li>
</ul>
</div>

<div class="col-sm-2">
<h3 class="title">- دسته چهارم نمایشی</h3>
<ul>
<li><a href="#">منوی اول نمایشی</a></li>
<li><a href="#">منوی دوم نمایشی</a></li>
<li><a href="#">منوی سوم نمایشی</a></li>
</ul>
</div>

<div class="col-sm-2">
<h3 class="title">- دسته پنجم نمایشی</h3>
<ul>
<li><a href="#">منوی اول نمایشی</a></li>
<li><a href="#">منوی دوم نمایشی</a></li>
<li><a href="#">منوی سوم نمایشی</a></li>
</ul>
</div>

<div class="col-sm-2">
<h3 class="title">- دسته ششم نمایشی</h3>
<ul>
<li><a href="#">منوی اول نمایشی</a></li>
<li><a href="#">منوی دوم نمایشی</a></li>
<li><a href="#">منوی سوم نمایشی</a></li>
</ul>
</div>

</div>
</li>
</ul>
</li>



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

ID = شماره منو.
menu_name = نام منو.
slug = همون نام منو هست فقط به جای فاصله - میندازه برای لینک سازی سئو پسند.
parentid = اینکه منوی اصلی هست (0) یا زیر دسته کدام منو هست و آیدی رو میاره میزاره.
sort = ترتیب نویسی هست.
menu_type = نوع منو رو با 1 و 2 مشخص میکنه. یک باشه صفحه و دو باشه میشه مقاله..
status = وضعیت منو.
adminid = کدام از مدیران وارد کردن اینو.


سپاس گذار خواهم بود که اگر بهم کمک کنید که چطوری باید این رو تکمیل کنم و به نتیجه نهایی که میخواهم برسم.
این رو هم اضافه کنم بسیار در PHP مبتدی هستم.
سپاس فراوان.

pasargadteam
چهارشنبه 07 مهر 1395, 09:05 صبح
دوستی نمیتونه کمک کنه؟

plague
چهارشنبه 07 مهر 1395, 14:26 عصر
با یه تابع بازگشتی میتونی بنویسی
این کد رو همینجوری نوشتم و احتمالا اررور سینتکس داره کدای دیتابیس غیر از کوئری رو حذف کردم تا شلوغ نشه



$query = "SELECT * FROM menus WHERE parentid = 0 ";


echo '<ul >';
foreach($query as $q )
{
echo '<li> ' . $q['menu_name'];
create_menu($q['ID'];);
echo '</li>';
}
echo '<ul >';


function create_menu( $parentid ){

$query = "SELECT * FROM menus WHERE parentid = $parentid ";
if(empty($query)) return false;

echo '<ul class="submenu">';
foreach($query as $q )
{
echo '<li> ' . $q['menu_name'];
create_menu($q['ID']);
echo '</li>';
}
echo '</ul>';
}


البته مشکلی که داره اینه که به ازای هر منو 1 کوئری میزنه که بهینه نیست و بهتره کل منو ها رو قبلش توی یک آرایه کش کنید تا دیگه نباشید به ازای هر منو 1 کوئری بزنید

pasargadteam
چهارشنبه 07 مهر 1395, 17:29 عصر
با یه تابع بازگشتی میتونی بنویسی
این کد رو همینجوری نوشتم و احتمالا اررور سینتکس داره کدای دیتابیس غیر از کوئری رو حذف کردم تا شلوغ نشه



$query = "SELECT * FROM menus WHERE parentid = 0 ";


echo '<ul >';
foreach($query as $q )
{
echo '<li> ' . $q['menu_name'];
create_menu($q['ID'];);
echo '</li>';
}
echo '<ul >';


function create_menu( $parentid ){

$query = "SELECT * FROM menus WHERE parentid = $parentid ";
if(empty($query)) return false;

echo '<ul class="submenu">';
foreach($query as $q )
{
echo '<li> ' . $q['menu_name'];
create_menu($q['ID']);
echo '</li>';
}
echo '</ul>';
}


البته مشکلی که داره اینه که به ازای هر منو 1 کوئری میزنه که بهینه نیست و بهتره کل منو ها رو قبلش توی یک آرایه کش کنید تا دیگه نباشید به ازای هر منو 1 کوئری بزنید


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

plague
چهارشنبه 07 مهر 1395, 21:43 عصر
کدت بعد از تغییر رو بزار