Blog Archive

Thursday, 17 October 2013

Drupal 7 - Views bread crumb module

There is no module which entirely support to give the bread crumbs on the views pages. So I created one module and tried to contribute to the community which contributed a lot to my carrier. I end up to merge my code with the other contributed modules which provides the breadcrumbs.

Here is my sandbox project page:- https://drupal.org/sandbox/rakeshjames/2049937

1)  views_breadcrumb.info 

name = Views breadcrumb
description =  Setting bread crumbs for all the view's pages.
dependencies[] = views
core = "7.x"
configure = admin/structure/block/manage/views_breadcrumb/views_breadcrumb_block/configure

2)  views_breadcrumb.module 

<?php

/**
 * @file
 * This module will provide a block that will helps to set the bread crumb
 * for views pages.
 */

/**
 * Implements hook_block_info().
 */
function views_breadcrumb_block_info() {
  $blocks['views_breadcrumb_block'] = array(
    'info' => t('Views breadcrumb block'),
    'region' => 'sidebar_first',
    'cache' => DRUPAL_CACHE_PER_PAGE,
    'pages' =>BLOCK_VISIBILITY_LISTED,
  );
  return $blocks;
}

/**
 *Implements hook_block_view().
 */
function views_breadcrumb_block_view($delta = '') {
  $block = array();
  switch ($delta) {
    case 'views_breadcrumb_block':
      global $user;
      global $base_url;
      $title_node_value = '';
      $count = 0;
      $block['subject'] = NULL;
      $path = current_path();
      $path_explodeArray = explode ("/", $path);
      $array_count = count($path_explodeArray);
      $last_value = intval($path_explodeArray[$array_count - 1]);
      if (is_numeric($last_value)) {
        $node = node_load($last_value);
        if(empty($node)) {
          $title_node_value = '';
        }
        else {
          $title_node_value = $node->title;
        }
        for ($i = 0; $i < $array_count - 1; $i++) {
          $arryTo_implode[$i] = $path_explodeArray[$i];
        }
        $path = implode("/", $arryTo_implode);
      }
      $access = db_query("SELECT access_callback  FROM {menu_router} WHERE path LIKE '%$path%' AND  page_callback LIKE '%views_page%'")->fetchField();
      if (empty($access)) {
        $block['content'] = drupal_set_message("Views breadcrumb block module only for views pages, please ".l('configure','admin/structure/block/manage/views_breadcrumb/views_breadcrumb_block/configure')." correctly.");
      }
      else {
 $plid = db_query("SELECT plid  FROM {menu_links} WHERE link_path LIKE '%$path%'")->fetchField();
 for ($i = 0; $plid > -1; $i ++) {
   if ($plid == 0){
     $plid = -1;
   }
   else {
     $result = db_query("SELECT plid, link_path, link_title FROM  {menu_links} WHERE mlid = $plid");
              foreach ($result as $value) {
       $plid = $value->plid;
       $data[$i]['link_path'] = $value->link_path;
       $data[$i]['link_title'] = $value->link_title;
$data[$i]['plid'] = $value->plid;
       $count++;
     }
   }
 }
      $breadcrumb[] = l('Home', $base_url);
      for ($j = $count - 1; $j > -1; $j --) {
        $breadcrumb[] .= l($data[$j]['link_title'], $data[$j]['link_path']);
        $count_mlid_plid = $data[$j]['plid'];
      }
      if (empty($title_node_value)) {
      $breadcrumb[] .= l(drupal_get_title(), $base_url.$_SERVER['REQUEST_URI']);
      }
      else {
        $previous_link_path = db_query("SELECT router_path FROM {menu_links} WHERE  link_path LIKE '%$path%'")->fetchField();
        $previous_link_title = db_query("SELECT link_title FROM {menu_links} WHERE  link_path LIKE '%$path%'")->fetchField();
        $breadcrumb[] .= l($previous_link_title, $previous_link_path);
        $breadcrumb[] .= t($title_node_value);
      }
      $output = drupal_set_breadcrumb($breadcrumb);
      $block['content'] = $output;
      }
      break;
  }
  return $block;
}

3)  README.txt 

INSTALL
==========

1. Extract module into /sites/all/modules folder.
2. Enable "Views breadcrumb" and
   "Views breadcrumb configuration" click the configuration button on /admin/modules page.


USAGE
==========

Go to admin/structure/block/manage/views_breadcrumb/views_breadcrumb_block/configure
and only do the steps follows,

     1. Go to 'Show block on specific pages' option and select "Only the listed pages"
     2. copy and paste the path of only views pages
     3. Go to 'REGION SETTINGS' and put it into any of the regions.
     4. Save block.


CREDITS
=========

Module was developed by Rakesh James (https://drupal.org/user/1177822,
http://3icube.com/)

Module development was not sponsored by anyone. It was created for the love of Drupal.

No comments:

Post a Comment