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

  1. 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.

    Posted by Ingo on September 30th, 2004 at 8:15 pm

  2. 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

  3. Beautiful!

    /me squirrels this away for use…

    Posted by Stephanie F on January 8th, 2004 at 6:32 pm

  4. Wonderful! Thanks for sharing this handy script!

    Posted by sergio on April 15th, 2004 at 10:01 am

  5. nice,simple and informative post

    Posted by Praful on June 12th, 2009 at 1:45 pm

Trackbacks & Pingbacks

  1. SRJM.co.uk (Journal) : Guest : Journal Archive » Creating breadcrumb links - [ i ][ > ][...] : SRJM Design
    October 27, 2007 at 3:37 am

Leave a Reply

-- or --

Textile formatting is in effect.

RSS feed for comments on this post. TrackBack URI