Most web applications today have some kind of menu build with anchor tags. The problem that the following script -- courtesy of my friend Anestis from alfasoftware.gr -- solves, is how to determine the actual link that was used to bring the user to the currently displayed page.
To use it, place it inside a script tag towards the end of your app/Views/Layout/default.ctp file (just before the closing body tag, will do just fine) and a little bit of CSS code in your appropriate style file (again app/webroot/css/cake.generic.css is a good candidate).
The CSS code is pretty easy :
a.active {
background-color: yellow; // add anything you like
}
and the javascript :
<script type="text/javascript">
// add the "active" class to the navigation link that brought us to this page
jQuery( function() {
// retrieve the relative url of the current page
var curUrl = "<?php echo (Router::url( NULL, FALSE)); ?>";
// in a cake application a relative URL is usually like
// /application/controller/action/param1/param2 ...
// so what we really need is the first three pieses of the URL
var tokens = curUrl.split("/").slice(0,4);
curUrl = tokens.join("/");
// if there is any pagination information then the word "index" also appears in the URL
// in this case we need to remove it, so it can match generated URL
var indexIndex = curUrl.indexOf('index');
if ( indexIndex > -1)
curUrl = curUrl.substring( 0, indexIndex - 1);
// for each page anchor tag
$('a').each( function() {
// retrieve the arnchor's target
var ref = $(this).attr("href");
// so if that anchor points to the current page
if(ref === curUrl){
$(this).addClass("active");
}
});
});
</script>
Enjoy!