设置"活动"下拉菜单包括" nav.php&#34 ;;

时间:2014-09-29 00:38:08

标签: php css drop-down-menu

设置"活跃" 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>

所以我的新手方法是设置一个包含的导航文件。

我很想看看职业选手如何解决这个问题。让我们勾选到哪个解决方案获得同行最多投票的解决方案。我相信它不会成为我的。

2 个答案:

答案 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>