Я все еще относительно новичок в php, поэтому не могу сказать, соответствует ли это рекомендациям или хаку, но это работает.
Я знаю, что это старая тема, но у меня есть решение, которое решает проблему, поднятую Фредериком в Посте Криса Соболевского.
Мы предполагаем, что у вас есть заголовок (который содержит ссылки) и шаблон нижнего колонтитула, и вы не хотите создавать новые заголовки для каждой страницы.
Поскольку каждая ссылка выводит нас на новую страницу с уникальным именем страницы, мы можем использовать это для присвоения идентификатора каждой из ссылок. В качестве альтернативы мы могли бы использовать параметр из $ _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);
?>
Тогда просто добавьте activeLink в ваш CSS, как вам захочется.
У меня возник соблазн просто найти URL, чтобы изменить DOM заголовочного файла, однако, если есть какие-либо другие ссылки на ту же страницу где-то еще в документе, мы не хотим, чтобы они также стилизовались. Поэтому я решил, что лучше всего добавить идентификатор. Это также лучше, если мы используем некоторые другие методы манипулирования DOM в php.
Любые отзывы о том, является ли решение хорошим или плохим, приветствуются!