2013-03-18 49 views
1

我试图创建一个导航,当用户在链接的href的页面内有一个颜色应用。所以,我搜索,我认为最好的办法是使用:如果变量等于href插入类到链接

$url = $_SERVER['REQUEST_URI']; 

后,我应该创建一个if语句,如果网址相同,我的导航的href它应该插入一个类到<a>元素。这个类将通过CSS应用于它的颜色。

这里有我的导航使用HTML,如果有帮助:

<div id="categories"> 
        <ul> 
         <li id="nav-quien"><a href="biografia.php">quien es</a> 
          <ul> 
           <li id="nav-biografia" class="drop1"><a href="biografia.php">biografia</a></li> 
           <li id="nav-curriculum" class="drop2"><a href="curriculum_todos.php">curriculum</a></li> 
          </ul> 
         </li> 
         <li id="nav-galeria" class="marginli"><a href="gallery.php">galeria</a> 
          <ul> 
           <li id="nav-gal-nat" class="drop3"><a href="gallery_natural.php">paisaje natural</a></li> 
           <li id="nav-gal-urb" class="drop4"><a href="gallery_urbano.php">paisaje urbano</a></li> 
          </ul> 
         </li> 
         <li id="nav-prensa" class="marginli"><a href="prensa.php">prensa</a></li> 
         <li id="nav-links" class="marginli"><a href="links.php">links</a></li> 
         <li id="nav-contacto" class="marginli"><a href="contacto.php">contacto</a></li> 
        </ul> 
       </div> 
</div> 

我想了解如何与REQUEST_URI wotk因为我看到它是非常有用的。所以任何帮助都是值得欢迎的!

:)

+0

你基本上,询问 “此代码为我”,因此,它不fesable IMO – samayo 2013-03-18 23:33:56

+0

@PHP小白。不,我没有问这个。现在我有一个关于如何做到这一点的基本知识,我不能在网上找到ifnormation。有了这些答案,我和其他人将能够理解这些编码。我的意图不是人们做我的代码,而是要学习。 – 2013-03-19 08:43:52

回答

1
<?php 
    function theUrl($link) { 
     $uri = $_SERVER['REQUEST_URI']; 
     if($link==$uri) { 
      return 'class="active"'; 
     } 
    } 
?> 

HTML

<ul> 
     <li><a href="" <?php echo theUrl('/index.php')?>>Home</a></li> 
     <li><a href="" <?php echo theUrl('/about.php')?>>About</a></li> 
     <li><a href="" <?php echo theUrl('/work.php')?>>Work</a></li> 
     <li><a href="" <?php echo theUrl('/contact.php')?>>Contact</a></li> 
    </ul> 

这是我在我的网站使用的脚本的修改版本。唯一的区别(与我的网站的代码),我的目标是第一个子目录,而不是uri,它允许我有无限的页面/内容,并保持适当的主导航链接突出显示。 (即www.mysite.com/work/

<a href="/work" <?php echo theUrl('work')?>>Work</a> 
(you can't use URI for this technique) 
+0

我看到它是如何工作的,以及我在寻找的是什么,我看到的唯一问题是,如果没有选择链接,则字段类仍然存在,但如果它没有内部信息。这能给我一个冲突还是不是不好的做法? – 2013-03-20 11:19:02

+0

好的。我在自己的实现中使用了另一个类(所以当我分享我的代码时,我忽略了这个警告)。修正'class =“”'的一个简单方法是将整个类声明包含在php函数中:'return'class =“active”''('class'之前的空格是有意的。 – Dawson 2013-03-20 12:29:01

+0

你也可以添加'else {return'inactive'}'在函数的if后面,这将确保'class'总是有一个值,但如果你的导航只使用'on/off'模式,我会认为这是膨胀的。开启/关闭“可以更好地服务于CSS。 – Dawson 2013-03-20 12:35:00

1

我平时做这样的事情:

<?php 

function is_active($page) { 
    return $_SERVER['REQUEST_URI'] == $page; 
} 
?> 

<style> 
.active_page { 
    font-weight: bold; 
} 
</style> 

<a class="<?php echo is_active('/biografia.php') ? 'active_page' : '' ?>" href="biografia.php">quien es</a> 
+0

如何组合这个,所以我没有一个空的类,如果链接不匹配? – 2013-03-20 11:41:47

+0

我会建议在HTML中留下类属性,而不是让php确定它是否会出现在该函数中。如果你使用这个函数并让它输出class属性,那么就决定你需要为你的元素添加类,那么你将陷入一片混乱,不得不回头重新编码很多东西。将元素留在元素中。它不会受伤。 – shrimpwagon 2013-04-02 14:29:48

1

按照PHP Manual,$ _ SERVER [ 'REQUEST_URI']返回:

的这是在给定的URI为了访问这个页面;比如'/index.html'。

因此,对于每个菜单项,您都需要检查$ _SERVER ['REQUEST_URI']是否与您的href字符串匹配。

<li id="nav-quien"><a href="biografia.php" 
<?php 
    if($_SERVER['REQUEST_URI'] == "/biografia.php") 
    { 
     echo ' class="active" '; 
    } 
?> 
>quien es</a> 
+0

工作方法,如果你有一个小的导航,就好像将来你想改变一些你将不得不一一改变的东西。 – 2013-03-20 13:04:46