Helper function to generate breadcrumb items.
Return value
array Items of the breadcrumb.
1 call to _easy_breadcrumb_build_items()
- template_preprocess_easy_breadcrumb in ./
easy_breadcrumb.module - Process variables for easy-breadcrumb.tpl.php.
File
-
./
easy_breadcrumb.module, line 184
Code
function _easy_breadcrumb_build_items() {
// Array storing the breadcrumb's segments.
$breadcrumb = array();
// Default classes for the segments.
$segments_classes = array(
'easy-breadcrumb_segment',
);
// Gets the flag saying if the front page segment should be included.
$include_front_page_segment = variable_get(EasyBreadcrumbConstants::DB_VAR_INCLUDE_HOME_SEGMENT, TRUE);
// Conditionally include the front page segment in the breadcrumb.
if ($include_front_page_segment) {
$front_text = _easy_breadcrumb_obtain_home_title();
// Marks the front--segment with an identifier class (useful for CSS).
$segments_classes[1] = 'easy-breadcrumb_segment-front';
// Adds a segment for the front page.
$breadcrumb[] = _easy_breadcrumb_build_item($front_text, $segments_classes, '<front>');
}
// There won't be more segments if visiting the front page,
// the don't waste resources.
if (!drupal_is_front_page()) {
// Gets the flag saying the capitalizator mode.
$capitalizator_mode = variable_get(EasyBreadcrumbConstants::DB_VAR_CAPITALIZATOR_MODE, 'ucwords');
// List of words to be ignored by the capitalizator.
$capitalizator_ignored_words = variable_get(EasyBreadcrumbConstants::DB_VAR_CAPITALIZATOR_IGNORED_WORDS, EasyBreadcrumbConstants::defaultIgnoredWords());
// Flag for including invalid paths as plain-text segments.
$include_invalid_paths = variable_get(EasyBreadcrumbConstants::DB_VAR_INCLUDE_INVALID_PATHS, TRUE);
// List of path to be excluded while generating segments.
$excluded_paths_arr = variable_get(EasyBreadcrumbConstants::DB_VAR_EXCLUDED_PATHS, EasyBreadcrumbConstants::defaultExcludedPaths());
// Obtains the alias of the current path.
$alias = drupal_get_path_alias();
// We need to pass our path through hook_url_outbound_alter(). This fixes
// clean URLs not working when they don't exist in the {url_alias} table and
// are created with something like subpathauto.
$normalized_path = current_path();
// hook_url_outbound_alter() expects defaults in url() options.
$options = array(
'fragment' => '',
'query' => array(),
'absolute' => FALSE,
'alias' => FALSE,
'prefix' => '',
'external' => FALSE,
);
drupal_alter('url_outbound', $alias, $options, $normalized_path);
// Allow the alias to be altered.
drupal_alter('easy_breadcrumb_path', $alias);
// Get the segments of the current path.
$alias_arr = explode('/', $alias);
// Get the quantity of segments in the current path.
$segments_quantity = count($alias_arr);
$segment_url_arr = array();
// Iterates over the segments of the current URL
// ("blog/article/hello-world") excepting the last segment
// (the title, 'hello-world' in that case).
$last_segment_title = '';
for ($idx_0 = 0, $idx_1 = 1; $idx_1 < $segments_quantity; ++$idx_0, ++$idx_1) {
// Build an array containing the URL of the segment being currently
// processed. E.g., having $alias as "blog/article/hello-world", at the
// first iteration this array will be array('blog'), the second
// (and last in that case) the array will be array('blog','article').
$segment_url_arr[] = $alias_arr[$idx_0];
// String with the potential-path of the segment being processed
// (e.g. 'blog/article').
$segment_url = implode('/', $segment_url_arr);
// Jump to the next segment if this url is configured to be excluded.
$excluded_path = _easy_breadcrumb_check_excluded_path($segment_url);
if ($excluded_path) {
continue;
}
$segments_classes[1] = 'easy-breadcrumb_segment-' . $idx_1;
// Obtain the internal path it represents.
$segment_normal_path = drupal_get_normal_path($segment_url);
// Check if this is a valid path.
$segment_valid_path = _easy_breadcrumb_validate_segment_path($segment_normal_path);
if (!$segment_valid_path && module_exists('redirect')) {
global $language;
$redirect = redirect_load_by_source($segment_url, $language->language);
if ($redirect) {
$segment_normal_path = $redirect->redirect;
$segment_valid_path = _easy_breadcrumb_validate_segment_path($segment_normal_path);
$segment_url = drupal_get_path_alias($segment_normal_path);
}
}
// Get the segment's raw text from the URL.
$segment_text = $alias_arr[$idx_0];
// Normalized segment's text (e.g. 'Blog');.
$segment_title = _easy_breadcrumb_obtain_segment_title($segment_normal_path, $segment_valid_path, $segment_text);
_easy_breadcrumb_check_replaced_title($segment_title);
// Don't duplicate breadcrumbs for menu default local tasks.
if ($segment_title == $last_segment_title) {
$item = menu_get_item($segment_url);
if ($item['type'] != MENU_VISIBLE_IN_BREADCRUMB) {
continue;
}
}
if ($segment_valid_path || $include_invalid_paths) {
$breadcrumb[] = _easy_breadcrumb_build_item($segment_title, $segments_classes, $segment_url, $segment_valid_path);
}
$last_segment_title = $segment_title;
}
// Gets the flag saying if the title should be appended to the breadcrumb.
$include_page_title_segment = variable_get(EasyBreadcrumbConstants::DB_VAR_INCLUDE_TITLE_SEGMENT, TRUE);
// Adds the page's title to the breadcrumb.
if ($include_page_title_segment) {
// Marks the page's-title-segment with an identifier class
// (useful for CSS).
$segments_classes[1] = 'easy-breadcrumb_segment-title';
// The title is the last segment in the URL.
$segment_text = $alias_arr[$segments_quantity - 1];
$segment_title = _easy_breadcrumb_obtain_page_title($segment_text);
_easy_breadcrumb_check_replaced_title($segment_title);
$title_segment_as_link = variable_get(EasyBreadcrumbConstants::DB_VAR_TITLE_SEGMENT_AS_LINK, FALSE);
// If the page's title will be a link or just a text.
$breadcrumb[] = _easy_breadcrumb_build_item($segment_title, $segments_classes, $alias, $title_segment_as_link);
}
}
// Allow the entire breadcrumb to be altered.
drupal_alter('easy_breadcrumb_breadcrumb', $breadcrumb);
return $breadcrumb;
}