设置"活跃" nav.php文件包含在下拉菜单中的状态。
这篇文章不是一个问题,因为它是针对常见问题的php新手级解决方案。
我使用以下常用方法构建了我的网站:
<?php
include "admin.php"; // handles MySQL connection and mysqli prepared stmts. etc.
include "header.php";
include "nav.php"; // nav with drop down menu
?>
<!-- html of the page -->
一切都很好,直到我试图设置&#34;活跃&#34;适当的选项卡和子选项卡。当然,任何网站设计师都遇到过这个问题。我试着谷歌搜索没有真正满意的答案。所以我提出了自己的想法。
我们假设一个网站有4个标签(about_us products faq contact),最深的下拉是6个子标签。
我将此行添加到admin.php的底部:
$about = $prod = $faq = $cont = $sub1 = $sub2 = $sub3 = $sub4 = $sub5 = $sub6 = "nothing";
我不确定是否需要,但我将其添加到CSS
.nothing { }
网站每页的顶部是:
<?php
include "admin.php";
/** if this page corresponds to the products tab and the fifth sub menu **/
$prod = $sub5 = "active"; // or whatever css uses as the class name
include "header.php";
include "nav.php"; // nav with drop down menu
?>
在nav.php中,css类名称在
中回显<div id="centeredmenu">
<nav id="nav">
<ul>
<li class="<?php echo $about; ?>"><a href="about.php">About Us</a>
</li>
<li class="<?php echo $prod; ?>"><a href="/products/index.php">Our Products</a>
<ul>
<li class="<?php echo $sub1; ?>"><a href="/products/index.php">Wedgets</a></li>
<li class="<?php echo $sub2; ?>"><a href="/products/grommets.php">Grommets</a></li>
<li class="<?php echo $sub3; ?>"><a href="/products/some.php">Some</a></li>
<li class="<?php echo $sub4; ?>"><a href="/products/more.php">More</a></li>
<li class="<?php echo $sub5; ?>"><a href="/products/useless.php">Useless</a></li>
<li class="<?php echo $sub6; ?>"><a href="/products/stuff.php">Stuff</a></li>
</ul>
</li>
所以我的新手方法是设置一个包含的导航文件。
我很想看看职业选手如何解决这个问题。让我们勾选到哪个解决方案获得同行最多投票的解决方案。我相信它不会成为我的。
答案 0 :(得分:0)
不会更容易处理CSS的所有内容,隐藏样式,并使当前页面中的样式处于活动状态(取消隐藏),这样类将始终相同但不会显示,如果语句更少,更少分配我觉得更容易维护。
答案 1 :(得分:0)
如果我正确地遵循了Fred -ii-正在丢弃的面包屑,我将提供另一种设置方法&#34; actve&#34;。
http://example.com/someone/has/too/complicated/of_a/dirctory/structure.php
在我的情况下,因为我已经有一个管理文件,php代码将在admin.php
中admin.php
<?php
$path = $_SERVER['PHP_SELF'];
// get filename
$file = $_SERVER[PHP_SELF];
$file = basename($file); //structure.php
// get directory
$dir = dirname($path);
$dir = explode("/", $dir);
$dir = array_slice($dir, -1, 1); // by adjusting the offset each directory name can be isolated
$dir = implode($dir);
?>
并在nav.php中
<div id="centeredmenu">
<nav id="nav">
<ul>
<li <?php if($file === "about.php")echo 'class="active"'; ?>><a href="about.php">About Us</a>
</li>
<li <?php if($dir === "products")echo 'class="active"'?>><a href="/products/index.php">Our Products</a>
<ul>
<li <?php if ($file === "index.php")echo 'class="active"'; ?>><a href="/products/index.php">Wedgets</a></li>
</ul>
</li>
我在此方法中获取目录名称时遇到的唯一问题是您正在向后工作(从/structure.php返回/某人/
当使用深度目录结构时,这将特别令人困惑,因为它不一致哪个目录级别应该是设置为&#34; active&#34;。
因此,为了下拉菜单,我个人会使用:
admin.php的
<?php
// get directory
$dir = dirname($path);
$dir = explode("/", $dir);
$dir = array_reverse ($dir, true); // Reverse the order
// and then select the directory names by referring to their depth in the directory structure.
$dir1 = isset($dir[1])? $dir[1]) : NULL; //someone
$dir2 = isset($dir[2])? $dir[2]) : NULL; //has
$dir3 = isset($dir[3])? $dir[3]) : NULL; //too
$dir4 = isset($dir[4])? $dir[4]) : NULL; //complicated
$dir5 = isset($dir[5])? $dir[5]) : NULL; //of_a
$dir6 = isset($dir[6])? $dir[6]) : NULL; //directory
?>
nav.php
<li <?php if ($dir4 === "complicated")echo 'class="active"'; ?>>
<a href="/someone/has/too/complicated/index.php">Wedgets</a></li>
// another area of the website could be:
<li <?php if ($dir4 === "this")echo 'class="active"'; ?>>
<a href="/someone/keeps/making/this/directory/structure/too/long/index.php">More_Wedgets</a></li>