Even if the default Drupal breadcrumb is already really good, it could be slightly improved when used with the forum module. Here is how we process.
Breadcrumbs are particularly useful for your readers to know exactly where they are in your forum (which series of categories they clicked to arrive here). It's even more important if you want to improve your SEO, as breadcrumb could (it's actually optional) be used by Google to display a clear position of a page in your website plan in their search results.
-
First, you have to create your own breadcrumb function, inspired by the return value of the drupal_get_breadcrumb(), that you improve a little bit.
template.php
function get_forum_breadcrumb() {
$current = drupal_get_breadcrumb();
if (count($current) == 1) {
// Rename Forums -> Discussions
$current[0] = "<a href='/discussion'>Discussion Index</a>";
}
else {
unset($current[0]);
// Rename Forums -> Discussions
$current[1] = str_replace("Forums", "Discussion Index", $current[1]);
}
return join(" <span class='separator'>></span> ", $current);
}
-
Then, modify the page preprocessor, by adding a new variable that will contain the forum breadcrumb. Note that we also define a new template file, called page-node-forum.tpl.php, that will be used only when you display a full forum topic.
template.php
/**
* Add a Javascript method to redirect, if needed, the comment hash to the review conclusion page
*/
function yourtheme_preprocess_page(&$variables) {
...
$node = $variables["node"];
// See page-forum.tpl.php
if ($variables["template_files"][0] == "page-forum") {
$variables["forum_breadcrumb"] = get_forum_breadcrumb();
...
}
// See page-node-forum.tpl.php
else if ($node->type == 'forum') {
$variables['template_files'][0] = 'page-node-forum';
$variables["forum_breadcrumb"] = get_forum_breadcrumb();
...
}
...
}
-
Third, add this new variable to the right templates (page-forum.tpl.php and page-node-forum.tpl.php):
page-forum.tpl.php
...
<?php if ($show_messages && $messages): print $messages; endif; ?>
<div id="forum-section" class="section"><?php print $forum_breadcrumb; ?></div>
<?php if ($tabs): print '<div>'; endif; ?>
<?php if ($title): print '<h2>'. $title .'</h2>'; endif; ?>
<?php if ($tabs): print ''. $tabs .'</div>'; endif; ?>
<?php if ($tabs2): print '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>
<?php print $help; ?>
<?php print $content ?>
...
page-node-forum.tpl.php
...
<?php if ($show_messages && $messages): print $messages; endif; ?>
<div id="forum-section" class="section"><?php print $forum_breadcrumb; ?></div>
<?php if ($tabs): print '<div>'; endif; ?>
<?php if ($title): print '<h2>'. $title .'</h2>'; endif; ?>
<?php if ($tabs): print ''. $tabs .'</div>'; endif; ?>
<?php if ($tabs2): print '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>
<?php print $help; ?>
...
-
And finally, for Forum Software Reviews fans, here is the CSS style we used here.
style.css
/*
* Forum Node content
*/
#forum-section {
background: #ddd url(images/forum.png) no-repeat 6px 50%;
border: 1px solid #ccc;
font-size: 14px;
padding: 5px 15px 5px 35px;
margin: 30px 0 15px;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
}
#forum-section a {
font-weight: normal;
color: #666;
}
#forum-section a:hover {
border-bottom: 1px solid #666;
}
#forum-section .separator {
color: #999;
font-size: 11px;
}
.section {
padding-left: 25px;
margin-bottom: 8px;
color: #4477AA;
font-size: 14px;
font-weight: bold;
}
.section span {
color: #555;
}
Clear your Drupal Cache, and congratulations, you are now using a new and enhanced breadcrumb!
Comments (5)
I am trying to create this
I am trying to create this breadcrumb.
Do I place these functions within the forum folder under modules or under my theme folder. My template file is in my theme folder.
I do not have files that are called
page-forum.tpl.php
page-node-forum.tpl.php
Do I create these? And if I do where do I place them?
Thanks
Daniele
Hi, You can place these
Hi,
You can place these functions in the template.php file, in your template folder. Same for the two files you talk about. They will override those from Drupal, once you reset all your Drupal cache.
Do not hesitate if you have further questions
FSR Admin - Vote for 2012.
Excellent tips. Worked like a
Excellent tips. Worked like a charm. Thank you.
This would be a very useful
This would be a very useful tweak for me to have! But I have one challenge. Where do I find the page preprocessor to insert those redirects? I'm still on Drupal 5.
Thanks so much!
Chris
Never mind. Just figured out
Never mind. Just figured out that Drupal 5 doesn't support the page preprocessor.
Post new comment