Mam kilka stron statycznych w menu nawigacyjnym. Chcę dodać klasę „bieżącą” do aktualnie wyświetlanego elementu.
Sposób, w jaki to robię, polega na dodaniu ton metod pomocniczych (każda dla jednej pozycji), aby sprawdzić kontroler i akcję.
def current_root_class
'class="current"' if controller_name == "homepage" && action_name == "index"
end
<ul>
<li <%= current_root_class %>><%= link_to "Home", root_path %>
Czy jest na to lepszy sposób !? Moja obecna droga jest taka głupia ......
navigation
ruby-on-rails-3
PeterWong
źródło
źródło
controller_name
iaction_name
zamiast params prawdopodobnieZrobiłem pomocnika o nazwie
nav_link
:używany jak:
który wygeneruje HTML podobny do
źródło
Użyj
current_page?
pomocnika, aby określić, czy powinieneś przypisać"current"
klasę. Na przykład:Zauważ, że możesz również podać ścieżkę (nie tylko skrót opcji), np
current_page?(root_path)
. : .źródło
Używam tej funkcji nav_link (tekst, link) w application_helper.rb (Rails 3), aby wykonać zadanie i przesuwa moje linki paska nawigacyjnego bootstrap na twitterze 2.0.
Przykład:
źródło
current_page?
metodę, podobnie jak w innych odpowiedziach.Sposób, w jaki to zrobiłem, to dodanie funkcji pomocniczej w application_helper
Następnie w nawigacji
Spowoduje to sprawdzenie ścieżki odsyłacza pod kątem identyfikatora URI bieżącej strony i zwraca bieżącą klasę lub pusty ciąg.
Nie testowałem tego dokładnie i jestem nowy w RoR (przechodzę po dziesięciu latach z PHP), więc jeśli ma poważną wadę, chciałbym to usłyszeć.
Przynajmniej w ten sposób potrzebujesz tylko 1 funkcji pomocniczej i prostego wywołania w każdym linku.
źródło
Aby zbudować odpowiedź @Skilldrick ...
Jeśli dodasz ten kod do application.js, upewni się, że wszystkie menu rozwijane z aktywnymi elementami podrzędnymi również zostaną oznaczone jako aktywne ...
Aby podsumować kod pomocniczy> Dodaj pomocnika o nazwie nav_link:
używany jak:
który wygeneruje HTML podobny do
źródło
Myślę, że najlepszy sposób to
application_helper.rb:
A w menu:
źródło
<%= content_tag(:li, "Click me", class: is_active('controller', 'action')) %>
, nie wypisze atrybutu klasy dla nil. apidock.com/rails/ActionView/Helpers/TagHelper/content_tagWiem, że to przestarzała odpowiedź, ale możesz łatwo zignorować wszystkie te bieżące sprawdzanie strony, używając opakowania pomocniczego link_to, zwanego gemem active_link_to , działa dokładnie tak, jak chcesz, dodaj aktywną klasę do linku do bieżącej strony
źródło
Oto pełny przykład, jak dodać aktywną klasę na stronie menu bootstrap w widoku railsów.
źródło
Używam niesamowitego klejnotu o nazwie Tabs on Rails .
źródło
Mam bardziej zwięzłą wersję nav_link, która działa dokładnie tak samo jak link_to, ale jest dostosowana do wyświetlania zawijanego znacznika li.
Umieść poniższy kod w pliku application_helper.rb
Jeśli spojrzysz na powyższy kod i porównasz go z kodem link_to w url_helper.rb, jedyną różnicą jest to, że sprawdza, czy adres URL jest bieżącą stroną i dodaje klasę „active” do zawijającego znacznika li. Dzieje się tak, ponieważ używam pomocnika nav_link z komponentem nawigacyjnym Twitter Bootstrap który preferuje umieszczanie linków wewnątrz znaczników li i klasę „active” stosowaną do zewnętrznego li.
Zaletą powyższego kodu jest to, że umożliwia on przekazanie bloku do funkcji, tak jak można to zrobić z link_to.
Na przykład lista nawigacji bootstrap z ikonami wyglądałaby następująco:
Szczupły:
Wynik:
Dodatkowo, tak jak helper link_to, możesz przekazać opcje HTML do nav_link, które zostaną zastosowane do tagu a.
Przykład podania tytułu kotwicy:
Szczupły:
Wynik:
źródło
Dla mnie osobiście użyłem tutaj kombinacji odpowiedzi
Używam materialize css, a mój sposób na zwijanie głównych kategorii polega na użyciu poniższego kodu
mam nadzieję, że to komuś pomoże
źródło
current_page?
Metoda nie jest dla mnie za mało elastyczny (powiedzmy ustawić kontroler, ale nie jest to działanie, to będziemy tylko prawdziwy powrót na akcję index kontrolera), więc zrobiłem to na podstawie innych odpowiedzi:Przykład:
źródło
Tak! Przeczytaj ten artykuł: Lepszy sposób na dodanie „wybranej” klasy do łączy w Railsach
Upuść nav_link_helper.rb do aplikacji / pomocników i może to być tak proste, jak:
Pomocnik nav_link działa tak samo jak standardowy helper link_to w Railsach, ale dodaje klasę „wybraną” do łącza (lub jego opakowania), jeśli spełnione są określone kryteria. Domyślnie, jeśli docelowy adres URL linku jest taki sam jak adres URL bieżącej strony, do linku dodawana jest domyślna klasa „wybrane”.
Istota jest tutaj: https://gist.github.com/3279194
AKTUALIZACJA: To jest teraz klejnot: http://rubygems.org/gems/nav_link_to
źródło
Używam prostego pomocnika, takiego jak ten dla linków najwyższego poziomu, więc
/stories/my-story
strona podświetla/stories
linkźródło
Pokażę moje rozwiązanie:
_header.html.erb :
application_helper.rb :
application_controller.rb :
źródło
Zgodnie z odpowiedzią Skilldricka zmienię ją na następującą:
aby była bardziej użyteczna.
źródło
Ta wersja jest oparta na wersji @ Skilldrick, ale umożliwia dodawanie treści html.
W ten sposób możesz:
nav_link "A Page", a_page_path
ale również:
lub dowolną inną zawartość html (możesz na przykład dodać ikonę).
Oto pomocnik:
źródło
Myślę, że wymyśliłem proste rozwiązanie, które może być pomocne w wielu przypadkach użycia. To pozwala mi:
link_to
(np. Dodaj ikonę w linku)application_helper.rb
active
do całej nazwy klasy elementu odsyłającego, zamiast być jedyną klasą.Więc dodaj to do
application_helper.rb
:A na swoim szablonie możesz mieć coś takiego:
Jako bonus możesz określić lub nie
class_name
i użyć go w następujący sposób:<div class="<%= current_page?(root_path) %>">
Dzięki wcześniejszym odpowiedziom 1 , 2 i zasobom .
źródło
wszystkie działają z prostymi paskami nawigacyjnymi, ale co z rozwijanym podmenu? gdy wybrane jest podmenu, pozycja górnego menu powinna być ustawiona jako `` aktualna '' w tym przypadku tabs_on_rails ja być rozwiązaniem
źródło
Tak rozwiązałem w moim obecnym projekcie.
Następnie..
źródło
Mój łatwy sposób -
application.html.erb
,main_controller.erb
,Dzięki.
źródło
Jeśli chcesz również obsługiwać skrót opcji html w widoku. Na przykład, jeśli chcesz wywołać go z inną klasą lub identyfikatorem CSS, możesz zdefiniować funkcję pomocniczą w ten sposób.
W tym widoku wywołaj tego pomocnika w taki sam sposób, w jaki wywołujesz helper link_to
źródło
Utwórz metodę
ApplicationHelper
jak poniżej.Teraz użyj go w widoku, jak poniżej.
1. Dla wszystkich działań konkretnego kontrolera
2. Dla wszystkich działań wielu kontrolerów (oddzielone przecinkami)
3. Do konkretnego działania określonego administratora
4. Dla określonej akcji wielu kontrolerów (oddzielone przecinkami)
5. Dla niektórych konkretnych działań dowolnego konkretnego kontrolera
6. Dla niektórych specyficznych akcji wielu kontrolerów (oddzielone przecinkami)
Mam nadzieję, że to pomoże
źródło