我有一个带有5个导航部分的小网站。
为了避免在我必须添加一个部分时更改每个页面上的代码,我在每个页面的导航部分使用php include。
现在我需要根据访问的页面将“selected”类添加到列表项(li)。这该怎么做?因为现在导航是唯一的。
这是代码
<nav>
<ul>
<li class="selected"><a href="index.php">Home</a></li>
<li><a href="biography.php">Bio</a></li>
<li><a href="photo.php">Photo</a></li>
<li><a href="work.php">Work</a></li>
<li class="last"><a href="contact.php">Contact</a></li>
</ul>
<div class="clear"></div>
</nav>
谢谢!
答案 0 :(得分:2)
这是简单的方法,纯CSS不需要任何编程:为您的身体和链接添加ID:
<body id='home'>
<nav>
<ul>
<li id='home-link'><a href="index.php">Home</a></li>
<li id='bio-link'><a href="biography.php">Bio</a></li>
<li id='photo-link'><a href="photo.php">Photo</a></li>
<li id='work-link'><a href="work.php">Work</a></li>
<li id='contact-link'class="last"><a href="contact.php">Contact</a></li>
</ul>
<div class="clear"></div>
</nav>
现在,你的风格如下:
#home #home-link, #bio #bio-link, #photo #photo-link, #work #work-link, #contact #contact-link{
//however you would have styled .active
}
答案 1 :(得分:1)
在您的网址结构中,您可以使用$_SERVER['PHP_SELF']
来标识当前页面。
$nav = array(
'Home' => 'index.php',
'Bio' => 'biography.php',
'Photo' => 'photo.php',
'Work' => 'work.php',
'Contact' => 'contact.php'
);
foreach($nav as $nav_title => $nav_link)
{
echo '<li '.($nav_link == basename($_SERVER['PHP_SELF']) ? 'class="selected"':'').'><a href="'.$nav_link.'">'.$nav_title.'</a></li>';
}
答案 2 :(得分:0)
下面是一个解决方案,将新页面添加到pages数组中:
<?php
$current_page = basename($_SERVER['REQUEST_URI']);
$pages = array('index','biography','photo','work','contact');
if(!in_array($current_page,$pages)){$current_page='index';}
$menu = "\n<nav>\n\t<ul>\n";
foreach($pages as $link){
$menu.="\t\t<li ".(($link==$current_page)?'class="selected"':'')."><a href=\"".$link.".php\">".(($link=='index')?'Home':ucfirst($link))."</a></li>\n";
}
$menu .= "\t</ul>\n\t<div class=\"clear\"></div>\n</nav>";
echo $menu;
?>
输出:
<nav>
<ul>
<li class="selected"><a href="index.php">Home</a></li>
<li ><a href="biography.php">Biography</a></li>
<li ><a href="photo.php">Photo</a></li>
<li ><a href="work.php">Work</a></li>
<li ><a href="contact.php">Contact</a></li>
</ul>
<div class="clear"></div>
</nav>
答案 3 :(得分:0)
使用JQuery,您可以动态地将“当前”类添加到$('nav&gt; ul&gt; li&gt; a')的父级,其绝对href将指向您当前正在查看的页面。
$(document).ready(function(){
$('nav > ul > li > a').each(function(){
if (window.location.indexOf($(this).prop('href'))!=-1) {
$(this).parent().addClass("current");
}
});
});
因此,每当菜单加载到页面时,“当前”类将被添加到导航中的正确位置。
答案 4 :(得分:0)
我仍然是相对较新的php所以我不能说这是最佳实践还是黑客行为,但它确实有效。
我知道这是一个古老的话题,但我有一个解决方案可以解决Frederik在Chris Sobolewski的帖子中提出的问题。
我们假设您有一个标题(包含链接)和页脚模板,并且不希望为每个页面创建新的标题。
由于每个链接将我们带到一个具有唯一页面名称的新页面,我们可以使用它来为每个链接提供一个id。或者,我们可以使用$ _GET中的参数,具体取决于您的导航设置方式。
在你的例子中我们可以使用类似的东西:
<nav>
<ul>
<li class="selected"><a href="index.php" id="indexLink">Home</a></li>
<li ><a href="biography.php" id="biographyLink">Biography</a></li>
<li ><a href="photo.php" id="photoLink">Photo</a></li>
<li ><a href="work.php" id="workLink">Work</a></li>
<li ><a href="contact.php" id="contactLink">Contact</a></li>
</ul>
<div class="clear"></div>
</nav>
现在在我们的php文件中,我们可以使用我们喜欢添加的任何技术来操作DOM,并从当前活动的链接中删除活动类。
记住我是新手,请原谅我,如果这不是操纵DOM的最佳做法,但这就是我接触它的方式:
?php
function curPageName() {
$pageName = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
return trim($pageName, ".php");
}
//string to find the active class
$classString=' class="activeLink"';
//String to find the current page link
$pageString='id="'.curPageName().'Link"';
//String to set the current page link active
$activeString='id="'.curPageName().'Link" class="activeLink"';
//load the html from the header file
$fileContents=file_get_contents("header.html");
//Remove the old active class
$newHtmlContent=str_replace($classString, "", $fileContents);
//Set the new active class
$newHtmlContent=str_replace($pageString, $activeString, $newHtmlContent);
//Save the manipulated HTML
file_put_contents("header.html",$newHtmlContent);
?>
然后根据需要在css中设置activeLink样式。
我很想简单地搜索URL来修改头文件的DOM,但是如果在文档中的其他地方有任何其他指向同一页面的链接,我们也不希望它们也被设置为样式。所以我认为最好添加一个id。如果我们使用一些在php中操作DOM的其他方法,这也会更好。
关于解决方案是好还是坏的任何反馈也值得赞赏!
答案 5 :(得分:-3)
$ page =“”; ?&GT; &LT; UL&GT; &LT; PHP if($ page =“home”) echo“&lt; li class ='selected'&gt;&lt; a href ='home.html'&gt; home&lt; / a&gt;&lt; / li&gt; &lt; li&gt;&lt; a href ='bio.html'&gt; bio&lt; / a&gt;&lt; / li&gt; &lt; li&gt;&lt; a href ='contact.html'&gt;联系&lt; / a&gt;&lt; / li&gt;“; 否则如果($ page =“bio”) echo“&lt; li&gt;&lt; a href ='home.html'&gt; home&lt; / a&gt;&lt; / li&gt; &lt; li class ='selected'&gt;&lt; a href ='bio.html'&gt; bio&lt; / a&gt;&lt; / li&gt;&lt; li&gt;&lt; a href ='contact.html'&gt; contact&lt; / A&GT;&LT; /锂&gt;“中; 否则if($ page =“content”) echo“&lt; li&gt;&lt; a href ='home.html'&gt; home&lt; / a&gt;&lt; / li&gt; &lt; li&gt;&lt; a href ='bio.html'&gt; bio&lt; / a&gt;&lt; / li&gt; &lt; li class ='selected'&gt;&lt; a href ='contact.html'&gt; contact&lt; / a&gt;&lt; / li&gt;“;
这真的很粗糙,而且有一百万种更好的方法来编写代码,我敢肯定,但是现在就去了。