Sillybean
Absurdly simple PHP breadcrumbs
[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:
[/code]case "directoryname": $label = "Directory Name"; break; <p>(If you want to read up on the <span class="caps">PHP </span>used here before you monkey with it, the <a href="http://www.php.net/switch">switch</a> function is the essential part.)</p> <p>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 <span class="caps">PHP, </span>you can include the script the really old-fashioned way:</p> [code lang="html" light="true"] <!--#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.
Posted on January 8, 2004 at 4:55 pm in Web Design · 6 comments
Sharing this post? The short URL is http://sillybean.net/?p=452






Beautiful!
/me squirrels this away for use…
Wonderful! Thanks for sharing this handy script!
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.
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.
[...] http://www.sillybean.net/archives/452 [...]
nice,simple and informative post