[updated Dec. 8, 2007]
For my birthday, you get a gift of code. (Sorry, no returns.)
I’m not exactly a PHP guru, so a while back I borrowed a breadcrumb script from some download site. It did what I wanted — used the directory tree to create the crumb trail — but it required you to add a line to the script each and every time you added a directory to your site. In fact, I reviewed hundreds of breadcrumb scripts, and all of them were like this. Some went to the trouble of maintaining a database containing links and labels.
It’s ridiculous. I use readable directory names, and I want a script to take advantage of that.
I finally got tired of looking for one and wrote it. This code assumes that the link text will be the capitalized directory name, unless you specify an exception.
<?php echo "<ul id="crumbs">"; /* get array containing each directory name in the path */ $parts = explode("/", dirname($_SERVER['REQUEST_URI'])); echo "<li><a href="/">Home</a></li>"; foreach ($parts as $key => $dir) { switch ($dir) { case "about": $label = "About Us"; break; /* if not in the exception list above, use the directory name, capitalized */ default: $label = ucwords($dir); break; } /* start fresh, then add each directory back to the URL */ $url = ""; for ($i = 1; $i <= $key; $i++) { $url .= $parts[$i] . "/"; } if ($dir != "") echo "<li>> <a href="/$url">$label</a></li>"; } echo "</ul>"; ?>
You’d just need to copy the case line to create more exceptions:
case “directoryname”: $label = “Directory Name”; break;
(If you want to read up on the PHP used here before you monkey with it, the switch function is the essential part.)
Stash this code in a file called crumbs.php and then use one of the lines below to include it, preferably in your site’s master template. Nifty trick: if your pages are parsed for server-side includes but not for PHP, you can include the script the really old-fashioned way:
<!--#include virtual="/crumbs.php" -->
The crumbs will still work even though the main page is not PHP-based. Or you can always use PHP:
<?php include(/path/from/root/to/crumbs.php); ?>
I like my HTML nice and semantic, so the script spits out an unordered list of links. To make it look like a normal crumb trail, add this to your CSS:
#crumbs { list-style: none; } #crumbs li { display: inline; }
For more on formatting lists, see Taming Lists.
Stephanie F says
Beautiful!
/me squirrels this away for use…
sergio says
Wonderful! Thanks for sharing this handy script!
Ingo says
Hm, the Code looks really f…ed up!
e.g. the & quot; should read ”
Took me quite a while to figure it out. Ah’: and the download link is also broken for the txp-Plugin.
Stephanie says
Thanks, Ingo. Textpattern seems to have choked on this when I switched over from Movable Type. I think it’s fixed now.
The plugin is another story—it needs some work before I put the link back up.
Praful says
nice,simple and informative post
Nic says
Hi,
Thanks for the script. I’ve got it to almost work. I have this folder structure:
http://www.domain.com/folder1/folder2/page, from which I get:
Home > Folder1 > Folder2
However when I get to Home > Folder1 and then click on Folder1 the breadcrumbs displayed should be just Home, however I get:
Home > with the backslash being a link to the home page.
Any idea how I could fix this?
Not sure if it matters, but I’m using RewriteRule in .htaccess.
Many thanks.
Nic says
Oops, forgot to click the “notify me” box.
Nas says
Dont you have to escape the double quotes within double quotes:
” \” \” “
Mark Middleton says
@NAS You’re right-it won’t work without escaping the double quotes, or just use single quotes (apostrophes) inside the double quotes…
korting says
I’m not sure exactly why but this weblog is loading incredibly slow for me. Is anyone else having this issue or is it a issue on my end? I’ll check back
later on and see if the problem still exists.
Elliot Strickland says
Is there a way to include the current page into the breadcrumbs list? Everything is working; except the current page does not show up.
Sarah Jay says
Really helpful script for me. Thanks for share that with us.
BestHolly says
I see you don’t monetize your website, don’t waste your
traffic, you can earn additional cash every month because you’ve got high quality content.
If you want to know how to make extra money,
search for: Ercannou’s essential tools best adsense alternative