0

Sérieusement, je n'ai aucune idée par où commencer. Comment puis-je implémenter un breadcrums d'aide sans utiliser de gemmes? J'ai essayé quelques gemmes, mais je préfère faire un simple helpe. Existe-t-il quelqu'un ou un tutoriel? Je n'ai pas trouvé cela =/Comment construire une chapelure dans les rails 4

Merci!

+1

J'espère que cela aide: http://stackoverflow.com/questions/4289272/how-do--create-a-dynamically-generated-breadcrumb-in-rails-3 – akz92

Répondre

2

Ma solun:

navigation_helper.rb

module NavigationHelper 
    def ensure_navigation 
    @navigation ||= [ { :title => 'Home', :url => '/' } ] 
    end 

    def navigation_add(title, url) 
    ensure_navigation << { :title => title, :url => url } 
    end 

    def render_navigation 
    render :partial => 'navigation', :locals => { :nav => ensure_navigation } 
    end 
end 

_navigation.html.erb

<ol class="breadcrumb"> 
    <% nav.each do |n| %> 
     <% unless n.equal? nav.last %> 
     <li><%= link_to n[:title], n[:url] %></li> 
     <% else %> 
     <li><%= n[:title] %></li> 
     <% end %> 
    <% end %> 
    </ol> 

application.html.erb

<%= render_navigation %> 

Et une vue:

<% content_for :title, 'My Page Title' %> 
    <% navigation_add @something.anything, '#' %> 

Ok? Aimé? Donnez-moi un vote!

+0

Belle solution, je l'ai utilisé pour faire chapelure automatiquement, s'il vous plaît vérifier ma réponse. – Ghazi

1

Vous ne pouvez pas faire cela.

Dans votre application_helper:

def breadcrumb(&block) 
    content_tag :ol, { :class => "breadcrumb", :itemprop => "breadcrumb" } do 
     block.call 
    end 
end 

def breadcrumb_item(name = nil, url = nil, html_options = {}, &block) 
    if name or block 
     html_options[:class] = "#{html_options[:class]} active" unless url 
     content_tag :li, html_options do 
     if block 
      block.call name, url 
     else 
      url ? link_to(name, url) : name 
     end 
     end 
    end 
    end 

maintenant dans les vues que vous collez ceci: (je index_path et @ user.name) - vous pouvez coller ce code sur la vue du spectacle à titre d'exemple

<%= breadcrumb do %> 
    <%= breadcrumb_item "index", index_path %> 
    <%= breadcrumb_item @user.name %> 
<% end %> 

Maintenant, quand vous avez besoin de fil d'Ariane, vous pouvez simplement appeler ce trunck ci-dessus et changer le chemin et les variables d'instance @votre_variable

0

J'ai également travaillé sur la solution d'Elton Santos et j'ai décidé que la chapelure devrait être automatique comme dans l'histoire. Donc, j'ai modifié du code:

Dans mon application.html.erb

<%= render_navigation %> 

Dans mon point de vue, j'utilisais déjà:

<% content_for :heading do 'User Detail' end %> 

Alors, mon navigation_helper.rb ressembler à:

module NavigationHelper 
    def navigation_add(title, url) 
    nav_list = session['navigation'].present? ? session['navigation'] : [] 
    nav_list << { 'title' => title, 'url' => url } 
    # 1. Take last 3 items only (-1 is last, not -0) 
    nav_list = nav_list[-3..-1] if nav_list.length > 3 
    # 2. Now, if first is pointing root, remove it 
    nav_list.shift if nav_list[0]['url'] == '/' 
    # 3. If last one is same as its predecessor, remove it 
    nav_list.pop if nav_list.length > 1 && (nav_list[-1]['url'] == nav_list[-2]['url']) 

    session['navigation'] = nav_list 
    end 

    def render_navigation 
    render partial: 'shared/navigation', locals: { nav_list: session['navigation'] } 
    end 
end 

et enfin, _navigation.html.erb:

<ol class="breadcrumb"> 
    <li><%= link_to '/' do %> 
     <i class="fa fa-home"></i> Home <% end %> 
    </li> 
    <i class="fa fa-angle-double-right" style="color: #ccc; padding: 0 5px;"></i> 

    <% nav_list.each_with_index do |nav, i| %> 
    <% if i != nav_list.length-1 %> 
     <li><%= link_to nav['title'], nav['url'] %></li> 
    <% else %> 
     <li class="active"><%= nav['title'] %></li> 
    <% end %> 
    <% end %> 
</ol> 

Donc, ce qui se passe ici est; J'enregistre chaque titre de page dans la session et construis des chapelures à partir de cela. Je garde les trois entrées récentes seulement avec les entrées codées en dur pour Home et supprimer les entrées en double lorsqu'elles ne sont pas séparées.