无法弄清楚如何使用while循环生成此菜单。
这是我的代码示例:
<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时,它应该是子菜单。 在我的例子中,这是有效的,现在我必须让它变得动态。 大脑没有工作。
感谢您的帮助!
使用代码从db获取数据:
<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>
答案 0 :(得分: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
循环创建菜单:
?><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
答案 1 :(得分: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>
答案 2 :(得分:1)
function load()
{
global $conn;
$query = "SELECT * FROM sub_category WHERE main_category_id='1'";
$result = mysqli_query($conn,$query);
while($row = mysqli_fetch_assoc($result)){
$cat_id=$row['sub_category_id'];
echo '<li><a href="?id='.$row['sub_category_id'].'">'.$row['sub_category_name'].'</a>';
$query2 = "SELECT * FROM categories WHERE sub_category_id='$cat_id'";
$result2 = mysqli_query($conn,$query2);
echo '<ul class="sub">';
while($row2 = mysqli_fetch_assoc($result2))
{
echo '<li><a href="?id='.$row2['category_id'].'">'.$row2['category_name'].'</a></li>';
}
echo '</ul>';
echo '</li>';}
}
答案 3 :(得分:0)
在这个示例中使用了parent_id列和ul-li列表构建带引用 - 它只进行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);
}
}