Não estou entendendo como o Twitter Bootstrap ativa links para a navegação. Se eu tiver uma navegação regular como esta (com link Ruby on Rails):
<ul class="nav">
<li class="active"> <a href="/link">Link</a> </li>
<li class=""> <a href="/link">Link</a> </li>
<li class=""> <a href="/link">Link</a> </li>
</ul>
Como faço para mantê-lo ativo com base no link clicado?
ruby-on-rails
twitter-bootstrap
LearningRoR
fonte
fonte
Respostas:
Acabei de responder a mesma pergunta aqui Twitter Bootstrap Pills with Rails 3.2.2
fonte
%li{:class => "#{'active' if current_page?(root_path)}"}=link_to "Home", root_path
controller_name
eaction_name
helpers ao invés de acessá-los a partir do hash params.Você pode usar algo como (muito semelhante ao que @phil mencionou, mas um pouco mais curto):
fonte
'active' if params[:controller] == 'controller1'
user_*_path
em<%= 'active' if current_page?(root_path) %>
?https://github.com/twg/active_link_to
#=> <li class="active"><a href="https://stackoverflow.com/users">Users</a></li>
fonte
Eu usei um helper para implementar isso no estilo dos helpers de formulário do Rails.
Em um ajudante (por exemplo
app/helpers/ApplicationHelper.rb
):Então, em uma vista (por exemplo
app/views/layouts/application.html.erb
):Este exemplo produz (quando na página 'usuários'):
fonte
Em vez disso, use para selecionar o link ativo no nav com base na rota atual sem o código do servidor:
fonte
$('li.active').closest('.dropdown').addClass('active');
para destacar o menu principal também.Tive sucesso usando o lógico e (
&&
) em haml :fonte
Para cada link:
ou mesmo
fonte
não tenho certeza se você está perguntando sobre como o css de bootstrap do twitter é usado, ou o lado rails. Estou assumindo o lado dos trilhos.
se sim, verifique o
#link_to_if
método ou o#link_to_unless_current
métodofonte
Hoje tive a mesma dúvida / problema mas com outra abordagem para a solução. Eu crio uma função auxiliar em application_helper.rb:
e o link se parece com este:
Você pode substituir
params[:action]
comparams[:controller]
e definir o nome do controlador no link.fonte
Eu uso isso para cada um
li
:<li><%= link_to_unless_current('Home', root_path) { link_to('Home', root_path, class: 'active') } %></li>
fonte
li
nãoa
Você pode definir um método auxiliar em
application_helper.rb
Agora você pode usar como:
create_link 'xyz', any_path
que renderizaria comoEspero que ajude!
fonte
Você deve fazer isso manipulando classes CSS. Ou seja, se um usuário clicar em algum link, então faça algo (ação de destino), defina o link anterior inativo e o novo link ativo.
Se seus links o levarem ao servidor (ou seja, fazer a página recarregar), você poderá apenas renderizar o link ativo corretamente no servidor. Caso contrário, se você estiver fazendo alguma coisa do lado do cliente (alternando painéis de guia ou qualquer outra coisa), você terá que usar javascript.
fonte
você poderia usar tabulous para os links
artigo aqui sobre como combinar tabulous com twitter bootstrap e rails 3.x
fonte
Eu escrevi um método auxiliar simples usando build in view helper
current_page?
quando você pode especificar oclass
nome personalizado emhtml_options
hash.Exemplos (quando você está na
root_path
rota):fonte
Muitas das respostas aqui têm coisas que funcionam, ou respostas parciais. Combinei um monte de coisas para fazer este método auxiliar do Rails que uso:
Pode ser ainda mais elaborado com a verificação de argumentos para suporte
&block
no link_to etc.fonte
Muitas respostas já, mas aqui está o que escrevi para fazer os ícones do Bootstrap funcionarem com o link ativo. Espero que ajude alguém
Este ajudante lhe dará:
Coloque isso em seu application_helper.rb
E use o link:
O último argumento é opcional - ele adicionará um ícone ao link. Use nomes de ícones de glifo. Se você quiser um ícone sem texto:
fonte
Aqui está o que eu fiz:
Eu criei um ViewsHelper e incluí no ApplicationController:
Dentro do ViewsHelper, criei um método simples como este:
Na minha opinião, eu faço o seguinte:
fonte
Parece que você precisa implementar um sistema de navegação. Se for complexo, pode ficar muito feio e muito rápido.
Nesse caso, você pode querer usar um plugin que possa lidar com isso. Você pode usar navigasmic ou navegação simples (eu recomendo navigasmic porque mantém a camada principal em uma visualização, onde ela pertence, e não em alguma configuração)
fonte
Código mais curto
Isso lida com AMBOS os elementos da lista de nav e sub nav. Você pode passar uma matriz por um único caminho e lidará com ambos.
application_helper
visualizar (html.erb)
fonte
Usando rubi no Sinatra ..
Estou usando o tema básico de bootstrap, aqui está o código de navbar de exemplo. Observe o nome da classe do elemento -> .nav - como é referido no java script.
na página de visualização (ou parcial) adicione: javascript, isso precisa ser executado toda vez que a página carrega.
haml view snippet ->
No depurador javascript, certifique-se de que o valor do atributo 'href' corresponda a window.location.pathname. Isso é um pouco diferente da solução da @Zitrax, que me ajudou a corrigir meu problema.
fonte
Básico, sem auxiliar
Eu uso isso porque tenho mais de uma aula -
fonte
fino
fonte