Reputation: 42450
I'm not entirely sure if this is even possible, but I'll try my best to explain my dilemma.
A website I'm working on has a header that contains links to important pages. The header html code resides in one file, which is included (php include) in all other pages.
This header.html consists of this code:
<li class="m1"><a href="home.php" class="active">Home</a></li>
<li class="m2"><a href="faq.php">FAQs</a></li>
<li class="m3"><a href="">Status</a></li>
<li class="m4"><a href="">Contact Us</a></li>
The page currently open is meant to have its class set to "active", but this doesn't work since my header code resides in just one file.
Is there any way, using php or something else, that I can set the appropriate link to class "active" depending on which page is opened?
So, if I click on FAQ, I want the code to look like this:
<li class="m1"><a href="home.php">Home</a></li>
<li class="m2"><a href="faq.php" class="active">FAQs</a></li>
<li class="m3"><a href="">Status</a></li>
<li class="m4"><a href="">Contact Us</a></li>
Upvotes: 0
Views: 682
Reputation: 25197
You can use JQuery (JavaScript) to do it dynamically:
$(document).ready(function() {
//Add the current class to all links pointing to the current page
search = window.location.search;
$("*").find("a[href='" + search + "']").each(function(){
$(this).parent('li').addClass("active");
//add your own logic here if needed
})
})
Which works quite well.
The other alternative is to use $_SERVER['PHP_SELF']
or __FILE__
:
<li class="m1"><a href="home.php"<?php if (basename($_SERVER['PHP_SELF']) == 'home.php'): ?> class="active"<?php endif; ?>>Home</a></li>
<li class="m1"><a href="faq.php"<?php if (basename($_SERVER['PHP_SELF']) == 'faq.php'): ?> class="active"<?php endif; ?>>FAQ</a></li>
<li class="m1"><a href="status.php"<?php if (basename($_SERVER['PHP_SELF']) == 'status.php'): ?> class="active"<?php endif; ?>>Statys</a></li>
<li class="m1"><a href="contact_us.php"<?php if (basename($_SERVER['PHP_SELF']) == 'contact_us.php'): ?> class="active"<?php endif; ?>>Contact Us</a></li>
Upvotes: 1
Reputation: 71
Here's another route you can take:
<?php
function getCurrPage() {
$org_page = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
$stripped_page = substr($org_page, 0, -4);
return $stripped_page;
}
$curPage = getCurrPage();
$actPage = array();
$actPage[$curPage] = ' class="active"';
?>
<li class="m1"><a href="home.php"<?=$actPage['home'];?>>Home</a></li>
<li class="m2"><a href="faq.php"<?=$actPage['faq'];?>>FAQs</a></li>
<li class="m3"><a href=""<?=$actPage['status'];?>>Status</a></li>
<li class="m4"><a href=""<?=$actPage['contact'];?>>Contact Us</a></li>
Upvotes: 1
Reputation: 26789
Yes you quite easily check which page you're on using $_SERVER['PHP_SELF']
.
A good way to approach this would be to store your links/titles in an array, then loop through them and echo the active class when it equals PHP_SELF
:
<?php
$links = array('Home' => 'home.php', 'FAQs' => 'faq.php', 'Status' => '', 'Contact Us' => '');
foreach ($links as $text => $page)
{
echo '<li><a href="'. $page .'"';
if ($_SERVER['PHP_SELF'] == $page)
{
echo ' class="active"';
}
echo '>'. $text .'<a></li>';
?>
Upvotes: 1