2011-04-07 125 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); 
    } 

}