2010-07-21 64 views
0

问题: 我想使用PHP include将文件“header_menu.html”导入到共享相同导航菜单的所有页面中,但每个页面都有自己当前高亮显示的菜单项。如何在加载页面时为html标签设置类?

例如,以下是菜单,在index.php中,只有第一个应该设置为“当前”类,而在download.php中,只有第二个应该是最新的。如何用JavaScript做到这一点?你能否提供详细的工作样本?你知道,我不想在每一页中复制菜单...

<li><a href="../index.php" class="current">Home</a></li> 
<li><a href="../download.php">Download</a></li> 
<li><a href="../purchase.php">Buy</a></li> 

谢谢!


编辑:PHP解决方案也欢迎!

+0

正如你从下面的答案中可以看到的,最好使用php而不是javascript。它看起来像我的任何PHP的答案是正确的,尝试一下,看看哪一个适合你。 qw3n提供的是一个很好的开始。 – superUntitled 2010-07-21 04:33:55

+0

是的,我宁愿使用PHP,如果它的工作,我会尝试!我已经添加了PHP标签;) – 2010-07-21 07:53:20

回答

4

最好的办法是用PHP。有一个函数可以告诉哪个页面正在调用它。你把在include和使用if语句来决定哪些菜单项设置为class="current"

这里是我,帮助我做

<?php 
$a = basename($_SERVER['REQUEST_URI'], ".php"); /* supposing filetype .php*/ 
?> 

然后在代码在互联网上找到的功能头看起来像

<li <?php if($a=='index' || $a==''){echo("class='current'");}?>><a href='index.php'>Home</a></li> 
<li <?php if($a=='download'){echo("class='current'");}?>><a href='download.php'>Download</a></li> 
+0

我们的意思是'include'而不是'import'? – Matchu 2010-07-21 04:44:36

+0

你的意思是本地,而不是你的答案的最后一行下载。 – superUntitled 2010-07-21 05:02:28

+0

谢谢你的解决方案。我使用了basename(__ FILE__);而不是基本名称($ _ SERVER ['REQUEST_URI'],“.php”);它也能正常工作。基本名称(__ FILE__);为您提供扩展名的文件。 – 2013-03-09 09:14:28

0

我在做什么是解析当前页面的URL并设置类当前。所以我为此使用JavaScript。我在javascript中找到当前页面的方法,并在导航菜单中查询此方法以查找菜单中的项目是否为当前项目。它是这样的

<script language="javascript"> 
    function isCurrentPage(inputPage) 
     { 
      /*..code goes here.. 
      returns "current" if true*/ 

     } 
</script> 

<li><a href="../index.php" class="<script>isCurrentPage("index.php");</script>">Home</a></li> 
<li><a href="../download.php" class="<script>isCurrentPage("download.php");</script>">Download</a></li> 
<li><a href="../purchase.php" class="<script>isCurrentPage("purchase.php");</script>">Buy</a></li> 
+0

您的JavaScript没有正文。我假设你打算把代码放进去,但这是一个便宜的方法来成为第一个答案。另外,为什么使用javascript来解决服务器端可以解决的问题? – 2010-07-21 04:23:16

+0

@格拉辛:我写道我正在使用JavaScript。我并不是说需要遵循这一点。 – Kangkan 2010-07-21 04:59:24

+0

是的,但你为什么使用JavaScript? – 2010-07-21 05:13:29

0

你目前如何确定哪一个应该是“当前”?它是基于文件名吗?

如果是这样,只需使用PHP:

<?php 
    $pages = array('Home' => 'index.php', 
     'Download' => 'download.php', 
     'Buy' => 'purchase.php'); 

    foreach ($pages as $pagename=>$filename) : 
     $class = ""; 
     if (strpos($filename, $_SERVER["SCRIPT_NAME"]) !== -1) 
     { 
      $class = ' class="current"'; 
     } 
?> 

<li> 
    <a href="../<?=$filename?>"<?=$class?>> 
    <?=$pagename?> 
    </a> 
</li> 

<?php endforeach; ?> 
0

只需使用PHP ...

之前包括header.php文件,设置一个PHP变量LIK E:$index = "1";$download = "1";

Then, in your `<a`> tag, use php again like this: 
<li><a href="../index.php" <?php if(isset($index)) echo 'class="current"'>Home</a></li> 
<li><a href="../download.php" <?php if(isset($download)) echo 'class="current"'>download</a></li> 
0

有很多方法可以做到这一点,但通过JavaScript来设置类的方式是使用setAttribute方法:

<a id="home" href="./index.php">Home</a> 

<script type="text/javascript"> 

var link = document.getElementById('home'); 
link.setAttribute('class', 'here'); 

</script> 

您还可以使用的getElementsByTagName(” a')并返回一个包含所有链接的数组,然后比较它们的href属性(使用getAttribute('href'))来确定当前页面。就像我说的,有很多方法可以完成这个部分,包括使用PHP。

相关问题