Project

easycrumbs

0.0
No commit activity in last 3 years
No release in over 3 years
Easy breadcrumbs for your website
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

= 1.5.2
= 0.9.12
= 2.11.3

Runtime

~> 3.2.0
 Project Readme

easycrumbs¶ ↑

Easy breadcrumbs for your site

Installation¶ ↑

If you don’t have the Gemcutter sources yet:

gem sources -a http://gemcutter.org

To install the gem type:

gem install easycrumbs

Add it to your Gemfile

gem "easycrumbs"

Quick start¶ ↑

It is really easy to have breadcrumbs in your project. Just type this into any view file and breadcrumbs will work for you.

breadcrumbs

ERB example:

<div id=breadcrumbs>
  <%= breadcrumbs %>
</div>

HAML example:

#breadcrumbs
  = breadcrumbs

You do not need to specify any more options in models or controllers. Easycrumbs will take everything it needs from your routes.rb file.

The routes.rb file with

map.resources :countries do |country|
  country.resources :movies do |movie|
    movie.resources :actors
  end
end

could generate this breadcrumb

Home > Countries > Country > Movies > Movie > Actors > Edit Actor

Model names¶ ↑

From database¶ ↑

If your model has breadcrumb column in database then it will be used to generate breadcrumbs

@usa = Country.new(:breadcrumb => "Usa")
@titanic = Movie.new(:breadcrumb => "Titanic")
@leo = Actor.new(:breadcumb => "Leonardo Di Caprio")

Home > Countries > Usa > Movies > Titanic > Actors > Edit Leonardo Di Caprio

You can change column name using :name_column option

breadcrumbs :name_column => :seo

@usa = Country.new(:seo => "Usa")
@titanic = Movie.new(:seo => "Titanic")
@leo = Actor.new(:seo => "Leonardo Di Caprio")

Home > Countries > Usa > Movies > Titanic > Actors > Edit Leonardo Di Caprio

From custom method¶ ↑

If you need custom name then just create method named breadcrumb in your model

class Actor < ActiveRecord::Base
  def breadcrumb
    "the best male actor: " + first_name
  end
end

Home > Countries > Usa > Movies > Titanic > Actors > Edit the best male actor: Leonardo

From i18n¶ ↑

Easycrumbs fully support i18n

breadcrumbs :i18n => true

Name will be taken from this key if your model does not have breadcrumb column or method:

breadcrumbs.models.model_name

Example en.yml

en:
    breadcrumbs:
        models:
            country: C0untry
            movie: M0v13
            actor: 4ct0r

Home > Countries > C0untry > Movies > M0v13 > Actors > Edit 4act0r

Controller names¶ ↑

From controller name¶ ↑

Default behavior is to use controller name

class CountriesController < ApplicationController
class MoviesController < ApplicationController
class ActorsController < ApplicationController

Home > Countries > Usa > Movies > Titanic > Actors > Edit Leonardo Di Caprio

From custom method¶ ↑

Similar to models you can specify custom breadcrumb method

class MoviesController < ApplicationController
  def breadcrumb
    "Movies (#{collection.size})"
  end
end

Home > Countries > Usa > Movies (234) > Titanic > Actors > Edit Leonardo Di Caprio

From i18n¶ ↑

Controller can also use i18n names

breadcrumbs :i18n => true

Name will be taken from this key if your controller does not have breadcrumb method:

breadcrumbs.controllers.controller_name

Example en.yml

en:
    breadcrumbs:
      controllers:
          application: H0m3
          countries: C0untr135
          movies: M0v135
          actors: 4ct0r5

H0m3 > C0untr135 > Usa > M0v135 > Titanic > 4ct0r5 > Edit Leonardo Di Caprio

Action prefixes¶ ↑

For last element you can add current action name as prefix. Example with Editing actor object:

Home > Countries > Usa > Movies > Titanic > Actors > Edit Leonardo Di Caprio

Default¶ ↑

For default prefix is added only for new and edit actions.

Home > Countries > Usa > Movies > Titanic > Actors > Edit Leonardo Di Caprio
Home > Countries > Usa > Movies > Titanic > Actors > New Leonardo Di Caprio

Custom¶ ↑

You can change this behavior. Just set :prefix option as you want:

  • :every - prefix will be added for every action

    breadcrumbs :prefix => :every
    action show => Actors > Show Leonardo Di Caprio
    action new  => Actors > New Leonardo Di Caprio
    action edit => Actors > Edit Leonardo Di Caprio
  • :none - prefix will not be added to any action

    breadcrumbs :prefix => :none
    action show => Actors > Leonardo Di Caprio
    action new  => Actors > Leonardo Di Caprio
    action edit => Actors > Leonardo Di Caprio
  • array of action names - prefix will be added only for specified actions

    breadcrumbs :prefix => [:show, :new]
    action show => Actors > Show Leonardo Di Caprio
    action new  => Actors > New Leonardo Di Caprio
    action edit => Actors > Leonardo Di Caprio

From i18n¶ ↑

Action names can also be taken from i18n

breadcrumbs :i18n => true

Name will be taken from this key:

breadcrumbs.actions.action_name

Example en.yml

en:
    breadcrumbs:
      actions:
          new: N3w {{name}}
          edit: 3d1t {{name}}
          show: {{name}} 5h0w

Blank links option¶ ↑

When path will not be recognized then exception will be raised

EasyCrumbs::NoPath

If you would like to have blank link(just text, without hyperlink) instead then just set :blank_links option

breadcrumbs :blank_links => true

Rendering options¶ ↑

You can set some rendering options also:

Separator¶ ↑

Default breadcrumbs separator is set to “ > ”, but you can use something else if you want

breadcrumbs :separator => ' ==> '
Home ==> Countries ==> Usa ==> Movies ==> Titanic ==> Actors ==> Edit Leonardo Di Caprio

breadcrumbs :separator => '/'
Home/Countries/Usa/Movies/Titanic/Actors/Edit Leonardo Di Caprio

By default last element will always be render as hyperlink. If you would like to render it in plain text then use :last_link option

breadcrumbs :last_link => false
<a href="/actors"/>Actors</a> > Edit Leonardo Di Caprio

breadcrumbs :last_link => true
<a href="/actors"/>Actors</a> > <a href="/actors/1/edit">Edit Leonardo Di Caprio</a>

Custom collection¶ ↑

If you do not like idea that breadcrumbs are recognized using routes.rb file then you can write your own breadcrumbs generator. Create new class inherited from EasyCrumbs::Collection or just monkey patch initialize method from EasyCrumbs::Collection

Look at example for acts_as_tree gem

class EasyCrumbs::Collection
  def initialize(request, options = {})
    object = options[:object]
    collection = []
    path = {:action => 'show', :controller => 'people'}

    while(!object.nil?)
      collection << Breadcrumb.new(object, options.merge(:path => path.merge(:id => object.id)))
      object = object.parent
    end
    @breadcrumbs = collection.reverse
  end
end
  • you will get request object and options hash from view helper(look at lib/easycrumbs/view_helpers.rb for more details)

  • you have to set @breadcrumbs as collection of EasyCrumbs::Breadcrumb objects

  • remember to pass options hash to every EasyCrumbs::Breadcrumb object

  • path have to be a hash and has to be recognized by rails routing system

For objects:

grandfather = Person.create, :breadcrumb => "Grandfather"
father = Person.create :parent => grandfather, :breadcrumb => "Father"
son = Person.create :parent => father, :breadcrumb => "Son"

The code:

breadcrumbs, :last_link => false

will generate this:

<a href="/people/1">Grandfather</a> > <a href="/people/2">Father</a> > Son

Look at code at tests for more details

Copyright © 2010 Stanisław Kolarzowski. See LICENSE for details.