Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP添加类以突出显示所选菜单的最简单方法是什么?_Php_Css_Menu_Highlight - Fatal编程技术网

使用PHP添加类以突出显示所选菜单的最简单方法是什么?

使用PHP添加类以突出显示所选菜单的最简单方法是什么?,php,css,menu,highlight,Php,Css,Menu,Highlight,我在所有页面中都有这样一个菜单,我想添加一个CSS类来根据页面突出显示所选菜单 最简单的方法是什么 <div id="menu"> <a href="index.php" class="item-menu">Home</a> <a href="projects.php" class="item-menu">Projects</a> <a href="contact.php" class="item-menu

我在所有页面中都有这样一个菜单,我想添加一个CSS类来根据页面突出显示所选菜单

最简单的方法是什么

<div id="menu">
   <a href="index.php" class="item-menu">Home</a>
   <a href="projects.php" class="item-menu">Projects</a>   
   <a href="contact.php" class="item-menu">Contact</a>            
</div>


菜单代码位于名为
menu.php
的文件中,该文件在所有页面中都会调用。我可以通过曲折的方式(使用IFs或其他东西)实现我想要的,但我正在寻找一个简单的解决方案。

这应该可以帮助您开始

<div id="menu">
    <a href="index.php" class="item-menu <?= $_SERVER['REDIRECT_URL'] == '/index.php' ? 'selected' : '' ?>">Home</a>
    <a href="projects.php <?= $_SERVER['REDIRECT_URL'] == '/projects.php' ? 'selected' : '' ?>" class="item-menu">Projects</a>   
    <a href="contact.php <?= $_SERVER['REDIRECT_URL'] == '/contact.php' ? 'selected' : '' ?>" class="item-menu">Contact</a>            
</div>

这很脏,但很容易:

<div id="menu">
   <a href="index.php" class="item-menu<?php if( basename( $_SERVER["SCRIPT_FILENAME"] ) == 'index.php' ) echo ' active';?>">Home</a>
   <a href="projects.php" class="item-menu<?php if( basename( $_SERVER["SCRIPT_FILENAME"] ) == 'projects.php' ) echo ' active';?>">Projects</a>   
   <a href="contact.php" class="item-menu<?php if( basename( $_SERVER["SCRIPT_FILENAME"] ) == 'contact.php' ) echo ' active';?>">Contact</a>            
</div>

作为已有解决方案的替代方案,您只需向主
元素添加一个类,然后为每个组合设置CSS:

<div id="menu" class="home">
   <a href="index.php" class="home item-menu">Home</a>
   <a href="projects.php" class="projects item-menu">Projects</a>   
   <a href="contact.php" class="contact item-menu">Contact</a>            
</div>​

#menu.home a.home,
#menu.projects a.projects,
#menu.contact a.contact {
    /* Active link CSS */
}​

​
#菜单,菜单,菜单,菜单,
#菜单项目a.项目,
#联系,联系{
/*活动链接CSS*/
}​
然后,您只需要使用PHP来确定
#menu
的类。这可以通过几种不同的方式完成,具体取决于应用程序的设置方式。如果您的
menu.php
只是包含在其他页面中,您可以将该类放在其他位置(如
元素),并将以前的CSS调整为类似
body.home#menu a.home,


请参见一个工作示例-

根据您的决定获取元素并将类名添加到class属性中:

if ($res = $xpath->query(sprintf('//a[@href="%s"]', basename($_SERVER['SCRIPT_FILENAME'])))
{
    $res->item(0)->setAttribute('class', $res->item(0)->getAttribute('class') . ' active');
}

这假设您在dom元素中有菜单,并且必须为它提供一个可用的
DOMXpath
$xpath
)。

简单解决方案的可能副本包括一个配置(通常是一个包含数据的数组),然后输出该数组。由于您没有共享任何PHP代码,因此无法很好地回答这个问题。但是“你尝试了什么?”这个问题至今仍然存在。只是提醒一下,如果这个文件包含在index.php、project.php或contact.php文件中,这将不起作用,因为basename将是包含的导航文件的名称。要缩短它,你还可以将它包装成一个函数:
函数highlight\u if($site){if(basename(uu FILE_uu)==$site..php)echo'active';}>
。然后链接应该如下所示:
@BryanMoyles是的,他在我的回答后添加了该信息。应该使用$\u SERVER[“SCRIPT\u FILENAME”]而不是FILE常量。