1
任何人都可以幫助我如何重建動態?動態菜單與數組從mysql
<?php
error_reporting (E_ALL);
$menu = array
(
1 => array
(
'text' => 'Articles',
'class' => 'articles',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 0
),
2 => array
(
'text' => 'Users',
'class' => 'users',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 0
),
3 => array
(
'text' => 'Groups',
'class' => 'groups',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 0
),
4 => array
(
'text' => 'Settings',
'class' => 'settings',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 0
),
5 => array
(
'text' => 'Add new',
'class' => 'add_article',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 1
),
6 => array
(
'text' => 'Categories',
'class' => 'categories',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 1
),
7 => array
(
'text' => 'Add new',
'class' => 'add_user',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 2
),
8 => array
(
'text' => 'Delete',
'class' => 'delete',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 1
),
9 => array
(
'text' => 'Show',
'class' => 'show',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 2
),
10 => array
(
'text' => 'Last created',
'class' => 'last',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 9
),
11 => array
(
'text' => 'First created',
'class' => 'first',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 9
),
12 => array
(
'text' => 'All',
'class' => 'all',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 9
),
13 => array
(
'text' => 'None',
'class' => 'none',
'link' => '#',
'show_condition'=> TRUE,
'parent' => 9
)
);
function build_menu ($menu)
{
$out = '<div class="container4">' . "\n";
$out .= ' <div class="menu4">' . "\n";
$out .= "\n".'<ul>' . "\n";
for ($i = 1; $i <= count ($menu); $i++)
{
if (is_array ($menu [ $i ]))
{ //must be by construction but let's keep the errors home
if ($menu [ $i ] [ 'show_condition' ] && $menu [ $i ] [ 'parent' ] == 0) { //are we allowed to see this menu?
$out .= '<li class="' . $menu [ $i ] [ 'class' ] . '"><a href="' . $menu [ $i ] [ 'link' ] . '">';
$out .= $menu [ $i ] [ 'text' ];
$out .= '</a>';
$out .= get_childs ($menu, $i);
$out .= '</li>' . "\n";
}
}
else
{
die (sprintf ('menu nr %s must be an array', $i));
}
}
$out .= '</ul>'."\n";
$out .= "\n\t" . '</div>';
return $out . "\n\t" . '</div>';
}
function get_childs ($menu, $el_id)
{
$has_subcats = FALSE;
$out = '';
$out .= "\n".' <ul>' . "\n";
for ($i = 1; $i <= count ($menu); $i++)
{
if ($menu [ $i ] [ 'show_condition' ] && $menu [ $i ] [ 'parent' ] == $el_id)
{ //are we allowed to see this menu?
$has_subcats = TRUE;
$add_class = (get_childs ($menu, $i) != FALSE) ? ' subsubl' : '';
$out .= '<li class="' . $menu [ $i ] [ 'class' ] . $add_class . '"><a href="' . $menu [ $i ] [ 'link' ] . '">';
$out .= $menu [ $i ] [ 'text' ];
$out .= '</a>';
$out .= get_childs ($menu, $i);
$out .= '</li>' . "\n";
}
}
$out .= ' </ul>'."\n";
return ($has_subcats) ? $out : FALSE;
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Dynamic PHP/CSS menu by roScripts</title>
<link href="css/styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div style="width:700px;margin:100px auto">
<h2>Dynamic PHP/CSS menu by <a href="http://www.roscripts.com" title="programming articles and tutorials" target="_blank">roScripts</a></h2>
<?= build_menu ($menu) ?>
</div>
</body>
</html>
我的數據庫:
mysql> describe menuSystem;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| title | varchar(50) | NO | | NULL | |
| class | varchar(30) | NO | | NULL | |
| link_url | varchar(100) | NO | | NULL | |
| parent_id | int(11) | NO | | 0 | |
| show | varchar(6) | NO | | NULL | |
+-----------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
我試試這個,但不工作:
$sql = "SELECT * FROM menuSystem ORDER BY id ASC";
$res = mysql_query($sql) or die (mysql_error());
if(mysql_num_rows($res) != 0) {
while($row = mysql_fetch_assoc($res)) {
$id = mysql_real_escape_string ($row['id']);
$title = mysql_real_escape_string ($row['title']);
$class = mysql_real_escape_string ($row['class']);
$link_url = mysql_real_escape_string ($row['link_url']);
$parent_id = mysql_real_escape_string ($row['parent_id']);
$show = mysql_real_escape_string ($row['show']);
$menu = array (
"$id" => array
(
'text' => "$title",
'class' => "$class",
'link' => "$link_url",
'show_condition'=> "$show",
'parent' => "$parent_id"
)
);
}
}
你能解釋「動態」是什麼意思嗎? *請*重新格式化您的代碼。你可以使用'{}'按鈕來格式化一些文件,或者閱讀:http://stackoverflow.com/editing-help。刪除不需要的額外換行符和全部。你可以看到你的問題看起來如何。 – Nanne 2011-06-11 12:29:54
我需要顯示數據庫中的所有菜單項。 我試着這個,但失敗(http://pastebin.com/Z7fRftiJ),雖然聲明只是回聲從數據庫最後resoult。 – Stefan 2011-06-11 12:46:07