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!