簡體   English   中英

動態下拉菜單和子菜單php mysql

[英]Dynamic Drop Down Menu and submenu 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 ;

就菜單而言,將子菜單存儲為數據庫中的逗號分隔值會很方便。

例如,考慮一個具有id,menus,submenus(用逗號分隔的子菜單)的表。

 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>";
    }

這對我來說很好,剛剛測試

如果可以發表評論。 如果無效,請發表評論。

您需要有一列,讓我們在s_category表中將其命名為parentId

其中的示例值:

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部分以匹配您的情況。 如果您只有一個內部級別,例如沒有子子菜單,這將起作用。 如果您打算使用子菜單,則需要遞歸函數。

用代碼和更改參數創建數據庫並編寫函數

  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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM