2011-04-07 169 views
3

無法弄清楚如何使用while循環生成此菜單。PHP生成UL LI,UL LI

這是我的代碼示例:

<ul id="nav"> 
<li><a href="#">Hoofdmenu 1</a> 
<ul class="sub"> 
     <li><a href="#">Submenu 1.1</a></li> 
     <li><a href="#">Submenu 1.2</a></li> 
     <li><a href="#">Submenu 1.3</a></li> 
     <li><a href="#">Submenu 1.4</a></li> 
    </ul> 
</li> 

<li><a href="#">Hoofdmenu 2</a> 
    <ul class="sub"> 
     <li><a href="#">Submenu 2.1</a></li> 
     <li><a href="#">Submenu 2.2</a></li> 
     <li><a href="#">Submenu 2.3</a></li> 
     <li><a href="#">Submenu 2.4</a></li> 
    </ul> 
</li> 
</ul> 

我DBTABLE樣子:

paginas: 
    id 
    title 
    content 
    type 

當類型==從父ID應該是子菜單。 在我的例子中,這個工作,現在我必須使它動態。 大腦不工作atm。

感謝您的幫助!

使用的代碼從數據庫獲取數據:

<ul id="nav"> 
<?php 
include_once("ond/inc/php/connect.php"); 
$query = "SELECT * FROM paginas WHERE type = '0'"; 
$result = mysql_query($query); 
while($row = mysql_fetch_object($result)){ 

echo '<li><a href="?ond='.$row->titel.'">'.$row->titel.'</a>';} 
echo '<ul class="sub">'; 

$query2 = "SELECT * FROM paginas WHERE type = '".$row->id."'"; 
$result2 = mysql_query($query2);  
while($row2 = mysql_fetch_object($result2)) 
{ 
    echo '<li><a href="?ond='.$row2->titel.'">'.$row2->titel.'</a></li>'; 
} 
echo '</ul>'; 
echo '</li>'; 

?> 
</ul> 
+2

大腦不工作?你是否再次消費自己的產品! :)無論如何,歡迎來到SO。這需要更多的信息:你使用的是什麼數據庫庫?你有什麼代碼連接到數據庫並獲取記錄?張貼代碼,人們可以給你指示如何做到這一點。如果你還沒有任何東西,你應該首先看看一個體面的PHP數據庫編程教程,如果遇到障礙,可以詢問具體問題。 – 2011-04-07 11:25:31

+3

這看起來很清晰我也是imo;反正我使用mysql數據庫。 我的php是體面的bt我的大腦今天不會工作(酒精,大麻) – Jordy 2011-04-07 11:28:53

+1

@Ganjafarmer好,就像說,如果你還沒有什麼,你應該開始使用一個基本的數據庫教程,例如, [這一個](http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html)。沒有一個具體的問題,在這裏我看不到更多的東西,而不是「爲我寫代碼」,這不是SO的使命和目的。 – 2011-04-07 11:30:33

回答

1

下一頁線做的解決方案:

<ul id="nav"> 
<?php 
include_once("ond/inc/php/connect.php"); 
$query = "SELECT * FROM paginas WHERE type = '0'"; 
$result = mysql_query($query); 
while($row = mysql_fetch_object($result)){ 

echo '<li><a href="?ond='.$row->titel.'">'.$row->titel.'</a>'; 

$query2 = "SELECT * FROM paginas WHERE type = '".$row->id."'"; 
$result2 = mysql_query($query2);  
echo '<ul class="sub">'; 
while($row2 = mysql_fetch_object($result2)) 
{ 
    echo '<li><a href="?ond='.$row2->titel.'">'.$row2->titel.'</a></li>'; 


} 
    echo '</ul>'; 
echo '</li>';} 



?> 
</ul> 
1

我會做這樣的事情:

首先,抓住你的數據輸出爲每個條目的數組,並通過循環它。通過它

$menuArray = array(); 

if (empty($type)) // If the entry has no "type", then it's a parent 
{ 
    $menuArray[$type]['title'] = $title; 
} 
else // else, it's a child, so append it to the parent 
{ 
    $menuArray[$type]['subitems'][] = $title; 
} 

然後,將具有$menuArray,循環創建的菜單:然後運行像這樣在使用這個例子列parent_id和UL麗列表建立與提述─它使

?><ul id="nav"><?php 
foreach ($menuArray as $item) 
{ 
    ?><li><a href="#">$item['title']</a><?php 
    ?><ul class="sub"><?php 

    foreach ($item['subitems'] as $subItem) 
    { 
     <li><a href="#">$subItem</a></li> 
    } 

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

只有1個SQL查詢和使用recoursion渲染輸出,這個代碼可以簡單地改變你的需求

 <?php 
/** 
    * Module for displaying data from items table 
    */ 
class App_Modules_Tree extends App_AbstractModule { 

    /** 
     * array for storing data 
     * 
     * @var array 
     */ 
    private $tree = array(); 
     /** 
     * html - output of current module 
     * 
     * @var string 
     */ 
     private $output = ''; 

     /** 
     * Retreives data from table items. 
     * 
     * @return void 
     */ 
     private function _getData() 
    { 
     $pdo = App_Registry::get('pdo'); 
     $levels = array(); 
     foreach ($pdo->query('SELECT * FROM items ORDER BY parent_id ASC',PDO::FETCH_OBJ) as $k=>$v){ 
        // references 
      $current = &$levels[ $v->id ] ; 
       $current['parent_id'] = $v->parent_id; 
       $current['name'] = $v->name; 
       if (0 == $v->parent_id){ 
       $this->tree[ $v->id ] = &$current; 
       } else { 
      $levels[$v->parent_id ]['children'][$v->id] = &$current; 
       } 
     } 
    } 

    /* 
    *App_AbstractModule::preRender overriding 
     * @return void 
    */ 
    protected function preRender() 
    { 
     $this->_getData(); 
     } 
     /** 
     * recursively build html output. 
     * 
     * @return string 
     */ 
    private function _render($arr) 
    { 
     $this->output.= '<ul>'; 
     foreach ($arr as $k=>$v) 
     { 
      $this->output.= '<li>'.$v['name'].'</li>'; 
      if(!empty($v['children'])){ 
       $this->_render($v['children']); 
      } 
     } 
     $this->output.= '</ul>'; 
     return $this->output; 
    } 
    /* 
    *App_AbstractModule::render overriding 
     * @return string 
    */ 
    protected function render() 
    { 
      return $this->_render($this->tree); 
    } 

}