407 lines
19 KiB
Text
407 lines
19 KiB
Text
/* $Id $ */
|
|
|
|
Custom Breadcrumbs 6.x-1.x (See below for 6.x-2.x)
|
|
--------------------------------------------------
|
|
Summary
|
|
-------
|
|
* Enable the module
|
|
* Assign 'administer custom breadcrumbs' permission to those roles that should
|
|
be allowed to add/edit/delete custom breadcrumbs.
|
|
* Assign 'use php in custom breadcrumbs' to roles that should be allowed to use
|
|
php to determine breadcrumb visibility.
|
|
* Go to Administer > Site building > Custom breadcrumbs to add new breadcrumbs
|
|
* Click "Add a new custom breadcrumb"
|
|
* Choose the node type to create a breadcrumb trail for
|
|
* For the titles, put each "crumb" one line after another (There is no need to
|
|
put in "home"):
|
|
|
|
Item 1
|
|
SubItem A
|
|
SuperSubItem X
|
|
|
|
* For the paths, put the path to each crumb starting after the domain name.
|
|
Don't include a leading or trailing slash.
|
|
|
|
item1
|
|
item-1/subitem-a
|
|
item-1/subitem-a/supersubitem-x
|
|
|
|
* Click save to save the breadcrumb
|
|
* Visit the page and your breadcrumb should appear!
|
|
|
|
Description
|
|
-----------
|
|
As the name suggests, Custom Breadcrumbs allows you to create and modify your
|
|
own breadcrumbs based on node type. After enabling the module, click on
|
|
Administer > Site building > Custom breadcrumbs. You'll be abel to add new
|
|
breadcrumbs from this page.
|
|
|
|
Clicking on that link, you have the option to select the node type the
|
|
breadcrumb will apply to. There are two text fields below-- "Titles" and
|
|
"Paths." When creating a breadcrumb, you're simply creating a link. In the
|
|
custom breadcrumbs interface "Titles" describes the text of the breadcrumb
|
|
while "Paths" describes the Drupal path the breadcrumb links to. Each Title
|
|
must have a corresponding Path.
|
|
|
|
To give a very simple example of how to use this module, let's say I have a
|
|
blog on my web site called "Deep Thoughts." To create this, I use the Views
|
|
module to create a page at /blog that displays all the node types "blog post."
|
|
Whenever a user views a blog post I want the breadcrumb to show
|
|
Home > Deep Thoughts instead of simply Home. To do this I would simply type
|
|
"Deep Thoughts" in the "Titles" field and and "blog" in the "Paths" field and
|
|
save my breadcrumb.
|
|
|
|
Using the Tokens module, the Custom breadcrumbs module becomes much more
|
|
flexible because breadcrumbs can become dynamic. You can create a breadcrumb
|
|
like Home > Deep Thoughts > [Month of Blog Post] [Year of Blog Post], where
|
|
"Deep Thoughts" links to my main blog page and "[Month of Blog Post]
|
|
[Year of Blog Post]" links to a view that shows only blog posts from the month
|
|
and year the blog post was created (e.g. June 2007). For this, you would do
|
|
the following:
|
|
|
|
Node Type:
|
|
Blog Post
|
|
|
|
Titles:
|
|
Deep Thoughts
|
|
[month] [yyyy]
|
|
|
|
Paths:
|
|
blog
|
|
blog/[mm]_[yyyy]
|
|
|
|
(where of course, blog/[mm]_[yyyy] is the path to the view of blog posts from
|
|
that month and year). So if you created a blog pos on June 13, 2007 your
|
|
breadcrumb would show Home > Deep Thoughts > June 2007 and "June 2007" links
|
|
to "blog/06_2007" which is a view of all blog posts from June 2007.
|
|
|
|
Also, note that Custom Breadcrumbs doesn't actually check to be sure that a
|
|
particular path exists, so you'll have to check yourself to avoid 404 errors.
|
|
|
|
Only users with 'administer custom breadcrumbs' permission will be allowed to
|
|
create or modify custom breadcrumbs.
|
|
|
|
Breadcrumb Visibility
|
|
---------------------
|
|
Users given 'use php in custom breadcrumbs' permission can include a php code
|
|
snippet that returns TRUE or FALSE to control whether or not the breadcrumb is
|
|
displayed. Note that this code has access to the $node variable, and can check
|
|
its type or any other property. Tokens should not be used in the visibility
|
|
code snippet, since they will not be replaced.
|
|
|
|
Special Identifiers
|
|
-------------------
|
|
The following identifiers can be used to achieve a special behavior:
|
|
<pathauto> - will clean any path using the current pathauto module settings,
|
|
if that module is installed.
|
|
<none> - can be used as a path to have a breadcrumb element that is not
|
|
hyperlinked.
|
|
|
|
Identifiers should be added to the paths area in the following format:
|
|
identifier|path. To be recognized, the identifier must be enclosed in angular
|
|
brackets, and proceed any part of the path:
|
|
|
|
For example: <pathauto>|[ogname-raw]
|
|
|
|
|
|
Custom Breadcrumbs 2.0
|
|
----------------------
|
|
|
|
Summary
|
|
-------
|
|
* Enable the module and any option submodules (see below for details)
|
|
* Assign 'administer custom breadcrumbs' permission to those roles that should
|
|
be allowed to add/edit/delete custom breadcrumbs.
|
|
* Assign 'use php in custom breadcrumbs' to roles that should be allowed to use
|
|
php to determine breadcrumb visibility.
|
|
* Go to Administer > Site Configuration > Custom breadcrumbs Settings to select
|
|
the 'Home' breacrumb text and possibly other global settings.
|
|
* Go to Administer > Site building > Custom breadcrumbs to add new breadcrumbs
|
|
* To add a breadcrumb, click on one of the tabs at the top of the page. For
|
|
example, click 'Node' to create a custom breadcrumb based on node type.
|
|
* Fill in the required information for the breadcrumb (varies depending on
|
|
breadcrumb type, see below).
|
|
* For the titles, put each "crumb" one line after another (There is no need to
|
|
put in "home")
|
|
* (optional) For each crumb title you can specify a title attribute ("tooltip")
|
|
to add to the link. Separate the crumb title and the title attribute with a
|
|
pipe (|) symbol:
|
|
|
|
Item 1
|
|
SubItem A|Title attribute for SubItemA (optional)
|
|
SuperSubItem X
|
|
|
|
* For the paths, put the path to each crumb starting after the domain name.
|
|
Don't include a leading or trailing slash.
|
|
|
|
item1
|
|
item-1/subitem-a
|
|
item-1/subitem-a/supersubitem-x
|
|
|
|
* Click save to save the breadcrumb
|
|
* Visit the page and your breadcrumb should appear!
|
|
|
|
New Features
|
|
------------
|
|
In the 6.x-2.x release, custom breadcrumbs has many new features which are
|
|
available through optional modules in the custom breadcrumbs package. The base
|
|
module, required by all the others, is still custom_breadcrumbs. This module
|
|
handles custom breadcrumbs based on node type as described above. The following
|
|
optional modules can also be installed to provide custom breadcrumbs in a
|
|
variety of situations:
|
|
|
|
+ custom_breadcrumbs_views provides custom breadcrumbs on views pages.
|
|
Once this module is enabled, a new "Views" tab will appear at
|
|
admin/build/custom_breadcrumbs. To add a views page breadcrumb, click on the
|
|
tab and then select the view from list of available views. Fill in the
|
|
visibility, title and paths sections as described above, and your breadcrumb
|
|
should appear on your views page. Note that token substitution is possible
|
|
with global and user tokens only. The $view object is available for use in
|
|
the php_visibility section.
|
|
|
|
+ custom_breadcrumbs_paths provides custom breadcrumbs on nodes and views at
|
|
a specified path (url). Once this module is enabled, a new "Path" tab will
|
|
appear at admin/build/custom_breadcrumbs. To add a breadcrumb for a node
|
|
or a view at a specific path, just enter the Drupal path in the Specific
|
|
Path section. Fill in the visibility, title and paths sections as
|
|
described above, and save the breadcrumb. Now your breadcrumb should appear
|
|
on the node or view at the specific path that you selected. Note that custom
|
|
breadcrumbs does not check the validity of the entered path. When entering a
|
|
path for a particular language (see below), do not specify the two-letter
|
|
language prefix. Custom breadcrumbs will assume the correct prefix according
|
|
to the selected language. To use '*' as a wildcard, go to custom breadcrumbs
|
|
configuration page at /admin/settings/custom-breadcrumbs and select the
|
|
'Use wildcard pattern matching in paths' option in the advanced settings
|
|
section. When this option is enabled, the breadcrumb that best matches the
|
|
path will be selected. The best match is determined by the depth at which
|
|
the first wildcard appears. For example, if the path is path/to/some/content
|
|
and breadcrumbs have been defined for path/to/* and path/to/some/*, the
|
|
latter will be chosen as the best match.
|
|
|
|
+ custom_breadcrumbs_taxonomy provides custom breadcrumbs on taxonomy term
|
|
pages, views, and for nodes that are assigned a taxonomy vocabulary or term.
|
|
Once this module is enabled, two new tabs will appear appear at
|
|
admin/build/custom_breadcrumbs: Term and Vocabulary. Breadcrumb generation
|
|
can be handled in two different ways. If 'use the taxonomy term hierarchy'
|
|
is checked at custom breadcrumbs configuration page, then breadcrumbs will
|
|
be generated similarly to the taxonomy_breadcrumb module. Otherwise,
|
|
breadcrumb generation will be according to the standard custom breadcrumbs
|
|
approach.
|
|
|
|
In taxonomy breadcrumb mode, the breadcrumb trail is automatically
|
|
constructed based on the taxonomy term hierarchy:
|
|
[HOME] >> [VOCABULARY] >> TERM >> [TERM] >> [TITLE]. In this mode the
|
|
breadcrumb titles are the term and vocabulary names. The paths these titles
|
|
are linked to can be assigned via the Term and Vocabulary tabs at
|
|
admin/build/custom_breadcrumbs. Providing a path for a vocabulary will enable
|
|
the [VOCABULARY] portion of the breadcrumb. The path for a term can
|
|
similarly be set, but if one is not provided the default taxonomy/term/tid
|
|
(where tid is a number, the taxonomy term id) will be used. Select the types
|
|
of nodes to include or exclude at the custom breadcrumbs configuration
|
|
settings page. The option to add the node title at the end of the breadcrumb
|
|
trail can also be enabled on that page. There is also an option to append
|
|
the current taxonomy term to the breadcrumb on taxonomy term pages
|
|
(defined to be any page with drupal path */taxonomy/term/*).
|
|
|
|
In the standard custom breadcrumbs mode, you can provide the titles and paths
|
|
for constructing the breadcrumb trail on nodes that have defined taxonomy
|
|
terms. Note that if a node has more than one term, the lightest term in the
|
|
lightest vocabulary with a defined custom breadcrumb will be used.
|
|
|
|
Note: do not use this module and the taxonomy_breadcrumb module at the same
|
|
time. Custom_breadcrumbs_taxonomy has extended the functionality of
|
|
taxonomy_breadcrumb, so that module is not needed if you are using
|
|
custom_breadcrumbs.
|
|
|
|
While at admin/settings/custom-breadcrumbs, go ahead and enable any
|
|
additional taxonomy breadcrumb options that suits your needs. If you are
|
|
using views to override taxonomy term pages, then be sure to enable the
|
|
"Use taxonomy breadcrumbs for views" option.
|
|
|
|
+ custom_breadcrumbsapi provides a simple api that allows custom breadcrumbs to
|
|
be defined for module pages implementing the api. Module developers need to
|
|
provide a modulename_custom_breadcrumbsapi() function that returns an array
|
|
containing the names of the module pages for which custom breadcrumbs may be
|
|
defined.
|
|
|
|
The following is an example that could be used with the forum module.
|
|
|
|
/**
|
|
* Implementation of hook_custom_breadcrumbsapi().
|
|
* Allow custom breadcrumbs for the following module pages.
|
|
*/
|
|
function forum_custom_breadcrumbsapi() {
|
|
return array('forum listing');
|
|
}
|
|
|
|
Then, in the callback functions for each of those pages, the following line
|
|
must be inserted within the function (preferably after defining $breadcrumb
|
|
but before setting the breadcrumb):
|
|
|
|
drupal_alter('breadcrumb', $breadcrumb, 'module_page_name');
|
|
|
|
Continuing with the forum module example, 'module_page_name' would be
|
|
replaced with 'forum listing'.
|
|
|
|
custom_breadcrumbsapi can also provide custom breadcrumbs for modules
|
|
implementing theme templates (e.g. files ending in .tpl.php). To add a
|
|
custom breadcrumb when a specific theme template file is called, click
|
|
on the module page tab at admin/build/custom_breadcrumbs. Select the
|
|
template file from the list of theme templates (determined from the
|
|
theme registry). Then fill in the usual custom breadcrumbs information
|
|
such as titles as paths. If using a php snippet for breadcrumb visibility
|
|
or to specify titles and paths (see below), you have access to the template
|
|
variables through $variables, an associative array defined by the module
|
|
providing the template. See the documentation in the template file for
|
|
details. For example, if a template file uses the variable $foo, then
|
|
access to that variable would be through $variables['foo'].
|
|
|
|
User Interface
|
|
--------------
|
|
The user interface has been modified for Custom Breadcrumbs 2.0. Breadcrumbs
|
|
from all custom breadcrumbs modules are tabulated at
|
|
admin/build/custom_breadcrumbs. The table can be sorted according to
|
|
breadcrumb name, type, language (if locale is enabled) by clicking on the
|
|
column headers. The table can also be filtered to display breadcrumbs of a
|
|
specific type, language, or combination of the two.
|
|
|
|
A new custom breadcrumbs fieldset has been added to node edit pages. All
|
|
defined breadcrumbs for a particular node are displayed here, with an option to
|
|
edit each. If no breadcrumbs have been defined for a particular node, then a
|
|
link can be followed back to admin/build/custom_breacrumbs to add a custom
|
|
breadcrumb.
|
|
|
|
Languages
|
|
---------
|
|
If the core Locale module is enabled, then an additional option to specify the
|
|
language for the breadcrumb is available when constructing the breadcrumb trail
|
|
(with any of the custom breadcrumb modules).
|
|
|
|
HOME breadcrumb
|
|
---------------
|
|
The text to display at beginning of the breadcrumb trail can be assigned from
|
|
the custom breadcrumb configuration settings page. Typically this is Home or
|
|
your site name. You can leave it blank to have no home breadcrumb. As with
|
|
normal crumb titles, you can optionally specify a title attribute ("tooltip")
|
|
for the crumb. Just separate the crumb text and the title attribute text with a
|
|
pipe (|) symbol (i.e. Home crumb text|attribute title text). There is
|
|
also an advanced setting to set the Home breadcrumb text on ALL pages, not
|
|
just those with defined custom breadcrumbs. You can also use this feature to
|
|
remove the home breadcrumb on all pages on the site - just enable the advanced
|
|
setting and then leave the home breadcrumb text blank.
|
|
|
|
It is possible to translate the home reference title from custom breadcrumbs
|
|
using the i18n module. Just put this in your settings.php:
|
|
|
|
$conf['i18n_variables'] = array(
|
|
//custom breadcrumbs
|
|
'custom_breadcrumb_home',
|
|
);
|
|
|
|
Then you can change it for each language at
|
|
http://example.com/#lang-prefix#/admin/settings/custom-breadcrumbs.
|
|
|
|
See http://drupal.org/node/313272 for additional information.
|
|
|
|
Use PHP in breadcrumb titles and paths
|
|
--------------------------------------
|
|
If this advanced option is enabled at admin/settings/custom-breadcrumbs, then
|
|
users given 'use php in custom breadcrumbs' permission can include small php
|
|
code snippets (less than 250 characters)in the titles and/or paths fields of
|
|
the add breadcrumb form. Be careful when enabling this option, as the incorrect
|
|
use of php can break your site.
|
|
|
|
There are a couple of ways to use php in breadcrumbs and titles. One way is to
|
|
return an array of breadcrumb titles in the titles text field and a
|
|
corresponding array of breadcrumb paths in the paths text field such as
|
|
|
|
Titles:
|
|
<?php return array('title-1','title-2','title-3');?>
|
|
|
|
Paths:
|
|
<?php return array('path/to/title-1','path/to/title-2','path/to/title-3');?>
|
|
|
|
Sometimes, it may be more convient to assign the titles and paths in the same
|
|
code snippet, so you can also return an associate array with elements 'titles'
|
|
and 'paths' that contain the titles and paths arrays, respectively.
|
|
For example,
|
|
|
|
Titles:
|
|
<?php $titles = array('title-1','title-2','title-3');
|
|
$paths = array('path/to/title-1','path/to/title-2','path/to/title-3');
|
|
return array('titles' => $titles, 'paths' => $paths); ?>
|
|
|
|
(In this case, the paths text field will be ignored, so you can leave it
|
|
empty).
|
|
|
|
When defined, appropriate objects such as $node, $term, or $view, will be
|
|
available for these code snippets. Note that if this option is enabled and an
|
|
array is not returned, then the module defaults to the standard operation of
|
|
using each line of the titles and paths text fields to define a part of the
|
|
breadcrumb.
|
|
|
|
For longer code snippets (greater than 250 characters), you can save your code
|
|
snippet in an include file and use a php require_once statement in the titles
|
|
and/or paths section of your custom breadcrumb to include and evaluate your
|
|
code. See http://drupal.org/node/654766 for an example of this.
|
|
|
|
Add CSS classes to custom breadcrumb elements
|
|
---------------------------------------------
|
|
|
|
You can enable this feature on the custom breadcrumbs configuration screen
|
|
under the HTML element identifiers section. There are several options that
|
|
provide html class identifiers for theming custom breadcrumb links, including
|
|
add a 'custom-breadcrumbs-home' ID attribute to the home breadcrumb item,
|
|
adding numbered class attributes 'custom-breadcrumbs-item-N' for each
|
|
breadcrumb item, adding even and odd classes to breadcrumb items and storing an
|
|
identifier that is unique for each defined custom breadcrumbs. Using this
|
|
last option requires modifying your sites phptemplate_breadcrumb (or theme
|
|
override) function to actually add the class name to the breadcrumb container.
|
|
The class name is returned as a string by the function
|
|
custom_breadcrumbs_unique_breadcrumb_id(). The identifier will be of the form
|
|
'custom-breadcrumbs-type-id'where type is the breadcrumb type (node, panels,
|
|
path, views or taxonomy) and id is the breadcrumb id number.
|
|
See http://drupal.org/node/643796#comment-2532998 for more information on this
|
|
feature.
|
|
|
|
Special Identifiers
|
|
-------------------
|
|
In Custom Breadcrumbs 2.0, Special identifiers are now provided as a separate,
|
|
optional module - custom_breadcrumbs_identifiers. At present, this module
|
|
provides the following identifiers:
|
|
|
|
<none> - Produces a plain text crumb. This identifier should not
|
|
be used with the pipe (|) symbol.
|
|
<pathauto> - Cleans the given path using your pathauto replacement
|
|
rules.
|
|
<book-hierarchy> - Provides crumbs for each parent node of a book page.
|
|
Whatever is placed in the corresponding position of the
|
|
title area will be ignored. It should not be used with
|
|
the pipe (|) symbol.
|
|
<page-title> - Provides a plain text crumb using the page title. Whatever
|
|
is placed in the corresponding position of the title area
|
|
will be ignored. It should not be used with the pipe (|)
|
|
symbol.
|
|
<menu-parent-trail> - Produces crumbs for each parent item for the given path.
|
|
The title information for this line will be ignored
|
|
because the menu link titles are used. If a path is not
|
|
provided following the pipe (|) symbol, the current path
|
|
with be used.
|
|
|
|
Additional special identifiers can be developed and added by contributed
|
|
modules that implement hook_cb_identifier_list(), to provide a description of
|
|
the identifer, and hook_cb_identifier_values(), to prepare the appropriate
|
|
crumb items. See the custom_breadcrumbs_identifiers.module for examples of
|
|
how to do this.
|
|
|
|
Identifiers should be added to the paths area in the following format:
|
|
identifier|path. To be recognized, the identifier must be enclosed in angular
|
|
brackets, and proceed any part of the path:
|
|
|
|
For example: <pathauto>|[ogname-raw]
|
|
|
|
Note that not all identifiers require the use of |path.
|
|
|
|
Authors
|
|
-------
|
|
bennybobw, dbabbage, Michelle, MGN
|