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:
case "<em>directoryname</em>": $label = "<em>Directory Name</em>"; 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.
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
Comments
-
Posted by Ingo on September 30th, 2004 at 8:15 pm
-
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.
Posted by Stephanie on September 30th, 2004 at 8:26 pm
-
Beautiful!
/me squirrels this away for use…
Posted by Stephanie F on January 8th, 2004 at 6:32 pm
-
Wonderful! Thanks for sharing this handy script!
Posted by sergio on April 15th, 2004 at 10:01 am
-
nice,simple and informative post
Posted by Praful on June 12th, 2009 at 1:45 pm
Trackbacks & Pingbacks
-
SRJM.co.uk (Journal) : Guest : Journal Archive » Creating breadcrumb links - [ i ][ > ][...] : SRJM Design
October 27, 2007 at 3:37 am
Leave a Reply
SRJM.co.uk (Journal) : Guest : Journal Archive » Creating breadcrumb links - [ i ][ > ][...] : SRJM Design
October 27, 2007 at 3:37 am











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.