我想在PHP中创建一个动态菜单,并根据它们在菜单上的页面将具有不同的样式。我有这个,但这不是我想要的:(
这是我拥有的数组,包含数据库中的信息
Array(
[Home] => Array
(
[url] => Home
[name] => Home
[is_home] => 1
)
[About] => Array
(
[url] => About
[name] => About
[is_home] => 0
)
[Contact] => Array
(
[url] => Contact.php
[name] => Contact
[is_home] => 0
)
)
这就是我现在所拥有的,
if(isset($_GET["p"])) {
if(in_array($page_name, $navigation[$page_name])) {
$navigation[$page_name]["name"] = "<span>{$navigation[$page_name]["name"]}</span>";
}
}
foreach ($navigation as $nav) {
echo "<li><a href=\"" . strtolower($nav["url"]) . "\">{$nav["name"]}</a></li>";
}
这是page_name变量的外观
$page_name = current(explode(".", ucfirst(strtolower($_GET["p"]))));
正如您所看到的,这会在导航菜单名称中插入span标签,这样就可以了,但这不是我想要的。我想添加class =“active”作为当前页面的列表项。我只是不知道该怎么做
我希望你理解我的意思,并对在这里粘贴代码时发生的任何杂乱缩进感到抱歉。
//修改
获取和数组代码
$mysql->query("SELECT `page_name`, `is_home` FROM `pages` ORDER BY `order` ASC");
$navigation_items = array();
while ($mysql->fetch($row)){
$navigation_items[] = array(
"url" => $row["page_name"],
"name" => current(explode(".", $row["page_name"])),
"is_home" => $row["is_home"]
);
}
return $navigation_items;
答案 0 :(得分:0)
首先,您提供的数组已重新格式化,这意味着您已将索引更改为不必要的页面名称。 这就是你如何实现你想要的目标:
<?php
$menu = $Db->fetchAll("SELECT * FROM `menu`"); //or whatever method you're using to get data from the database.
$current = null;
if(isset($_GET['p'])) {
$current = current(explode(".", ucfirst(strtolower($_GET["p"]))));
}
$navigation = '';
for($i=0;$i<count($menu);$i++) {
$url = ucfirst(strtolower($menu[$i]['url']));
if($current == $url)
$class = ' class="active"';
else
$class = '';
$name = '<span'.$class.'>'.$menu[$i]['name'].'</span>';
$navigation .= "<li><a href='{$url}'>{$name}</a></li>";
}
?>