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

6 Responses to “Absurdly simple PHP breadcrumbs”

  1. Stephanie F says:

    Beautiful!

    /me squirrels this away for use…

  2. sergio says:

    Wonderful! Thanks for sharing this handy script!

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

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

  5. Praful says:

    nice,simple and informative post

Leave a Reply