Динамическое выпадающее меню и подменю php mysql

У меня есть меню, которое нужно динамически создавать из базы данных.
нужно иметь меню и подменю

например (что я хочу):

<ul class="dropdown">
<li><a href="#">Link 1</a> </li>
<li><a href="#">Link 2</a> </li>
<li><a href="#">Link 3</a> </li>
<li><a href="#">Link 4</a>
<ul class="sub_menu">
<li><a href="#">Link 4 - 1</a></li>
<li><a href="#">Link 4 - 2</a></li>
<li><a href="#">Link 4 - 3</a></li>
</ul>
</li>
<li><a href="#">Link 5</a></li>
<li><a href="#">Link 6</a> </li>
</ul>

ниже приведен код, который я использовал для меню с помощью функции, которую я также хочу подменю

function listMenu(){
$ans = $this->select("cat_id,cat_name","s_category","1");
if(is_array($ans)){
foreach($ans as $val){
echo
"<li><a href=\"post-summary.php?cid=$val[0]\" >$val[1]</a></li>";
}
}
else{
echo "";
}
}

База данных выглядит следующим образом:

CREATE TABLE IF NOT EXISTS `s_category` (
`cat_id` int(11) NOT NULL AUTO_INCREMENT,
`cat_name` varchar(15) NOT NULL,
`cat_uid` int(2) NOT NULL,
`cat_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`cat_parent` int(11) DEFAULT '0',
`cat_sort` int(11) DEFAULT NULL,
`cat_delete` int(1) DEFAULT '0',
PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

0

Решение

Что касается меню, хранение подменю в виде значений, разделенных запятыми, в базе данных может пригодиться.

т.е. рассмотрим таблицу с id, меню, подменю (несколько подменю разделены запятой).

 function listMenu(){
$ans = $this->select("menus,submenus");
if(is_array($ans)){
foreach($ans as $val){
echo    "<li><a href=\"post-summary.php?cid=$val[0]\" >$val[0]</a>"; //menus

$submenu = explode(",",$val[1]);

foreach($submenu as $values){
echo    "<li><a href=\"post-summary.php?cid=$val[0]&proname=$values\" >$values</a></li>"; // submenus
}
echo "</li>";
}
}
}

попробуй это

$con    =   db_connect();
$str    =   "select menus,submenus from your_tabel  ";
$result =   mysql_query($str,$con);

while($arr = mysql_fetch_array($result))
{
echo    "<li><a href=\"post-summary.php?cid=$arr[0]\" >$arr [0]</a>"; //menus

$submenu = explode(",",$arr [1]);

//make sure you have several sub-menus else use a if condition here to avoid foreach error
foreach($submenu as $values){
echo    "<li><a href=\"post-summary.php?cid=$arr[0]&proname=$values\" >$values</a></li>"; // submenus
}
echo "</li>";
}

это работает хорошо для меня только что проверил сейчас

комментарий, если работает.
комментарий, если не работает.

0

Другие решения

Вам нужно иметь столбец, пусть мы назовем его parentId в s_category Таблица.

Пример значений там:

catId,catName,parentId
1,Vehicles,null
2,Planes,null
3,Cars,1
4,Bicycles,1

Таким образом, ваша структура будет выглядеть так:

- Vehicles
- Cars
- Bicycles
- Planes

Вам нужно получить данные, как это (считаться псевдокодом):

$topLevelItems = (select catId, catName from s_category where parentId is null)
foreach($topLevelItems as $item) {
echo '<a href="...">$item["catName"]</a>';
$subItems = (select catId, catName from s_category where parentId=$item['catId'])
foreach($subItems as $subItem) {
echo '<a href="...">$subItem["catName"]</a>';
}
}

Вам нужно переписать часть SQL, чтобы она соответствовала вашему случаю. Это будет работать, если у вас есть только один внутренний уровень, например нет под-подменю. Если вы планируете использовать под-подменю, вам понадобится рекурсивная функция.

0

создал вашу базу данных и напишите функцию с кодом и измените параметры

  function getAllFrom($field, $table,$where = NULL, $and = NULL , $orderfield, $ordering = "DESC") {

global $con;

$getAll = $con->prepare("SELECT $field FROM $table where $where $and  ORDER BY $orderfield $ordering");

$getAll->execute();

$all = $getAll->fetchAll();

return $all;}<ul>
<?php
$allCats = getAllFrom("*", "categories", "parent = 0", "" , "cat_id", "ASC");
foreach ($allCats as $cat) { ?>
<li>
<?php
echo '<a href="categoreis.php?pagename=' . str_replace(' ', '-', $cat['name_cat']) . '&pageid=' . $cat["cat_id"] . '">

' . $cat['name_cat'] . '

</a>';
?>
<ul class="sub-menu[enter image description here][1]">
<?php
$catsub = $cat['cat_id'];
$SubCats = getAllFrom("*", "categories", "parent = {$catsub}", "" , "cat_id", "ASC");
foreach ($SubCats as $sub) { ?>
<li>
<?php
echo '<a href="categoreis.php?pagename=' . $sub['name_cat'] . '&pageid=' . $sub["cat_id"] . '">

' . $sub['name_cat'] . '

</a>';
?>
</li>
<?php  }
?>
</ul>
</li>
<?php   }
?>
</ul>
0
По вопросам рекламы [email protected]