Ajouter dynamiquement la classe active à bootstrap li dans les Rails
dans la barre de navigation bootstrap. Vous pouvez obtenir l'effet d'un bouton cliqué en ajoutant la classe active. Naturellement, je veux utiliser ceci sur mes pages. Par exemple, si je suis sur la page à propos de nous, je veux que le bouton à propos de nous soit cliqué.
Quelle est la meilleure façon de procéder? Je vais aller à chaque page et en bas ont une fonction jQuery ajouter la classe active. Est-il un meilleur moyen?
7 réponses
pour tout savoir sur current_page?ici
Vous pouvez ajouter une méthode pour gérer la logique avec current_page?, exemple d'une méthode :
module ApplicationHelper
def active_class(link_path)
current_page?(link_path) ? "active" : ""
end
end
exemple bootstrap barre de navigation template
<div class="navbar">
<div class="navbar-inner">
<a class="brand" href="#">Title</a>
<ul class="nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
</ul>
</div>
</div>
Donc, sur l'affichage apparaît comme
HTML
<li class="<%= active_class(some_path) %>">
<%= link_to "text of link", some_path %>
</li>
HAML
%li{:class => active_class(some_path)}
= link_to "text of link", some_path
Ou vous pouvez utiliser request.fullpath pour obtenir courant plein de chemin si un chemin courant a un le paramètre
exemple
<ul>
<% Contry.all.each do |c| %>
<li class="snavitem <%= active_class(contry_path(c)) %>">
<%= link_to "show #{c.name}", contry_path(c) %>
</li>
<% end %>
</ul>
et application_helper.rb
def active_class(link_path)
request.fullpath == link_path ? "active" : ""
end
lire au sujet de la demande.fullpath ici
a mon avis, Une façon plus propre d'y parvenir est d'écrire un link_to_in_li méthode dans application_helper.rb:
def link_to_in_li(body, url, html_options = {})
active = "active" if current_page?(url)
content_tag :li, class: active do
link_to body, url, html_options
end
end
puis utiliser de cette façon
<%= link_to_in_li "Home", root_path, id: "home_link" %>
- je trouver le code à l'intérieur de li un peu difficile à lire.
pour ceux qui ont du mal à comprendre ceci, voici un exemple avec mes chemins et mes noms de fichier explicitement indiqués. En tant que nouvelle personne sur rails, j'avais du mal à le comprendre. Merci aux autres personnes qui ont répondu ci-dessus, comme il m'a aidé à le comprendre!
j'ai placé le bootstrap navbar dans mon application.HTML.fichier erb:
<div class="navbar-header">
<a class="navbar-brand" href="/">Mapper</a>
<ul class="nav navbar-nav">
<li class="<%= is_active?('/') %>"><%= link_to "Home", '/' %></li>
<li class="<%= is_active?('/main/map') %>"><%= link_to "Map", '/main/map' %></li>
<li class="<%= is_active?('/main/about') %>"><%= link_to "About", '/main/about' %></li>
</ul>
</div>
ceci va dans le Helper application_.rb fichier:
module ApplicationHelper
def is_active?(link_path)
current_page?(link_path) ? "active" : ""
end
end
C'est elle! Maintenant votre demande ajoutez dynamiquement la classe' active ' à n'importe quelle page actuellement affichée (c'est-à-dire l'élément de liste correspondant dans la barre de navigation). C'est beaucoup plus simple (et plus sec) que d'ajouter manuellement la barre de navigation à chaque page (view) et de mettre à jour la classe 'active'.
je vais poster ma réponse que j'ai créée à partir de ces autres parce qu'en cas de vues CRUD la classe active n'a pas été placée.
module ApplicationHelper
def active_class(name)
controller_name.eql?(name) || current_page?(name) ? 'active' : ''
end
end
Mon point de vue d'utiliser quelque chose comme ceci:
<ul class="nav navbar-nav">
<li class="nav-item <%= active_class('/') %>">
<a class="nav-link" href="/">Home</a>
</li>
<li class="nav-item <%= active_class('leads') %>">
<a class="nav-link" href="/leads">Leads</a>
</li>
</ul>
<ul class="nav navbar-nav pull-right <%= active_class(edit_user_registration_path) %>">
<li class="nav-item ">
<a class="nav-link" href="/users/edit">Perfil</a>
</li>
<li class="nav-item">
<%= link_to('Sair', destroy_user_session_path, method: :delete) %>
</li>
</ul>
essayez cela, dans chaque page, cochez la cotroller ou de l'action et ajouter le css
Par exemple:
<li class= <%= (controller.controller_name.eql?('pages') && controller.action_name.eql?('index') )? 'active':''%> ><%= link_to 'my page', pages_path%></li>
Vous pouvez définir une méthode d'aide à application_helper.rb
def create_link(text, path)
class_name = current_page?(path) ? 'active' : ''
content_tag(:li, class: class_name) do
link_to text, path
end
end
Maintenant, vous pouvez utiliser de la forme:
create_link 'xyz', any_path qui rendrait <li class="active"><a href="/any">xyz</a></li>
parfait pour la navigation bootstrap!