我有一个php / mysql驱动的菜单。每当URI反映该菜单项时(基本上,当我在该页面上时),我试图在菜单项中添加一个活动类,但我找到的每个例子都是一个没有像我一样通过数组或转发器填充的菜单。
如何操纵您在下面看到的活动课程,以便仅在我在该页面上时显示?
这是我的菜单
<?php
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
if($row['id'] == 2){
// below is the active class that is now being populated accross all items equally
echo '<li class="nav-item dropdown active">';
echo '<a href="#" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">';
echo $row["pagename"];
echo '<i class="zmdi zmdi-chevron-down"></i>';
echo '</a>';
// create a new list
echo '<ul class="dropdown-menu">';
// loop second/submenu query results
while($sub_row = $result2->fetch_assoc()) {
echo '<li>';
echo '<a href="' . $sub_row["link"] . '" class="dropdown-item">' . $sub_row["pagename"] . '</a>';
echo '</li>';
}
echo "</ul>";
echo '</li>';
} else { // for all other menu links
echo '<li class="nav-item dropdown active">';
echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
echo '</li>';
}
}
} else {
echo "0 results";
}
?>
下面的屏幕截图显示了渲染后的结果。注意活动的类以黄色突出显示,它被添加到我的主菜单中的每个项目(我编码的方式,当然这是错误的)。绿色是$sub_row["link"]
(回答Mark下面的问题
注意,只需要在主菜单上以编程方式添加活动类。 (我的代码的else
部分)。
下面的屏幕截图显示了当用户在www.domain.com/how-it-works.php
页面时,活动类如何影响菜单项。活动类包含样式以使菜单项以这种方式显示。
提前致谢
答案 0 :(得分:4)
很难测试没有数据库输出与配对匹配但是试试这个,基本上你想要一个if语句来获取当前页面的URL并将它与你从数据库中获取的URL匹配。
<?php
if ($result->num_rows > 0) {
$pageURL = str_replace('/', '', $_SERVER['REQUEST_URI']);
$homeURL = $_SERVER['REQUEST_URI'];
// output data of each row
while($row = $result->fetch_assoc()) {
if($row['id'] == 2){ ?>
<li class="nav-item dropdown">
<a href="" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">
<?php echo $row["pagename"];?>
<i class="zmdi zmdi-chevron-down"></i>
</a>
<ul class="dropdown-menu">
<?php while($sub_row = $result2->fetch_assoc()) {?>
<li>
<a href="<?php echo $sub_row["link"]; ?>" class="dropdown-item">
<?php echo $sub_row["pagename"] ?>
</a>
</li>
<?php } ?>
</ul>
</li>
<?php
} else if($row['id'] == 1){ ?>
<li class="nav-item dropdown <?php echo ($homeURL == $row["link"])? 'active' : '';?>">
<a href="<?php echo $row["link"]; ?>" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">
<?php echo $row["pagename"]; ?>
</a>
</li>
<?php
} else { ?>
<li class="nav-item dropdown <?php echo ($pageURL == $row["link"])? 'active' : '';?>">
<a href="<?php echo $row["link"]; ?>" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">
<?php echo $row["pagename"]; ?>
</a>
</li>
<?php }
}
} else {
echo "0 results";
}
?>
编辑:
获取当前页面网址的位是:
$pageURL = end(explode('/', $_SERVER['REQUEST_URI']));
进行检查的位是(这只是一个简写if语句:
<?php echo ($pageURL == $row["link"])? 'active' : '';?>