Saya memiliki beberapa halaman statis di menu navigasi. Saya ingin menambahkan kelas seperti "saat ini" ke item yang sedang ditampilkan.
Cara saya melakukannya adalah dengan menambahkan banyak metode pembantu (masing-masing untuk satu item) untuk memeriksa pengontrol dan tindakan.
def current_root_class
'class="current"' if controller_name == "homepage" && action_name == "index"
end
<ul>
<li <%= current_root_class %>><%= link_to "Home", root_path %>
Apakah ada cara yang lebih baik untuk melakukannya !? Cara saya saat ini sangat bodoh ...
navigation
ruby-on-rails-3
PeterWong
sumber
sumber
controller_name
dan mungkinaction_name
bukannya paramsSaya membuat seorang pembantu menelepon
nav_link
:digunakan seperti:
yang akan menghasilkan HTML seperti
sumber
Gunakan
current_page?
helper untuk menentukan apakah Anda harus menetapkan"current"
kelas atau tidak . Sebagai contoh:Catatan Anda juga dapat melewati jalan (bukan hanya hash pilihan), misalnya:
current_page?(root_path)
.sumber
Saya menggunakan fungsi nav_link (teks, tautan) ini di application_helper.rb (Rails 3) untuk menyelesaikan pekerjaan dan itu memutar tautan bar nav bootstrap twitter 2.0 saya untuk saya.
Contoh:
sumber
current_page?
metode, seperti pada jawaban lain.Cara saya melakukannya adalah dengan menambahkan fungsi pembantu di application_helper
Kemudian di nav,
Ini menguji jalur link terhadap halaman saat ini uri dan mengembalikan kelas Anda saat ini atau string kosong.
Saya belum menguji ini secara menyeluruh dan saya sangat baru mengenal RoR (pindah setelah satu dekade dengan PHP) jadi jika ini memiliki kelemahan utama, saya ingin mendengarnya.
Setidaknya dengan cara ini Anda hanya membutuhkan 1 fungsi pembantu dan satu panggilan sederhana di setiap tautan.
sumber
Untuk membangun jawaban @Skilldrick ...
Jika Anda menambahkan kode ini ke application.js, itu akan memastikan bahwa setiap menu dropdown dengan anak-anak yang aktif juga akan ditandai sebagai aktif ...
Untuk merekap kode pendukung> Tambahkan pembantu yang disebut nav_link:
digunakan seperti:
yang akan menghasilkan HTML seperti
sumber
Saya pikir cara terbaik adalah
application_helper.rb:
Dan di menu:
sumber
<%= content_tag(:li, "Click me", class: is_active('controller', 'action')) %>
, itu tidak akan mencetak atribut kelas untuk nil. apidock.com/rails/ActionView/Helpers/TagHelper/content_tagSaya tahu ini adalah jawaban yang sudah ketinggalan zaman , tetapi Anda dapat dengan mudah mengabaikan semua pemeriksaan halaman saat ini dengan menggunakan pembungkus link_to helper, yang disebut permata active_link_to , berfungsi persis seperti yang Anda inginkan, tambahkan kelas aktif ke tautan halaman saat ini
sumber
Berikut adalah contoh lengkapnya, tentang cara menambahkan kelas aktif pada halaman menu bootstrap dalam tampilan rel.
sumber
Saya menggunakan permata mengagumkan yang disebut Tabs on Rails .
sumber
Saya memiliki versi nav_link yang lebih ringkas yang bekerja persis seperti link_to, tetapi disesuaikan untuk mengeluarkan tag li pembungkus.
Letakkan baris berikut di application_helper.rb Anda
Jika Anda melihat kode di atas dan membandingkannya dengan kode link_to di url_helper.rb, satu-satunya perbedaan adalah ia memeriksa apakah url adalah halaman saat ini, dan menambahkan kelas "aktif" ke tag li pembungkus. Ini karena saya menggunakan pembantu nav_link dengan komponen nav Twitter Bootstrap yang lebih memilih tautan untuk dibungkus di dalam tag li dan kelas "aktif" diterapkan ke li luar.
Hal yang menyenangkan tentang kode di atas adalah memungkinkan Anda memasukkan blok ke dalam fungsi, seperti yang dapat Anda lakukan dengan link_to.
Misalnya, daftar navigasi bootstrap dengan ikon akan terlihat seperti ini:
Ramping:
Keluaran:
Selain itu, seperti helper link_to, Anda dapat memasukkan opsi HTML ke nav_link, yang akan diterapkan ke tag.
Contoh penyampaian judul untuk jangkar:
Ramping:
Keluaran:
sumber
Bagi saya pribadi, saya menggunakan kombinasi jawaban di sini
Saya menggunakan materialize css dan cara saya membuat kategori utama dilipat adalah dengan menggunakan kode di bawah ini
semoga bisa membantu seseorang
sumber
The
current_page?
Metode tidak cukup fleksibel untuk saya (mengatakan Anda mengatur controller tapi tidak tindakan, maka hanya akan kembali benar pada tindakan indeks controller), jadi saya sudah membuat ini berdasarkan jawaban yang lain:Contoh:
sumber
Ya! Lihat artikel ini: Cara yang Lebih Baik untuk Menambahkan Kelas 'terpilih' ke Tautan di Rails
Letakkan nav_link_helper.rb ke dalam app / helpers dan itu bisa semudah:
Helper nav_link bekerja seperti pembantu link_to Rails standar, tetapi menambahkan kelas 'terpilih' ke tautan Anda (atau pembungkusnya) jika kriteria tertentu terpenuhi. Secara default, jika url tujuan tautan adalah url yang sama dengan url laman saat ini, kelas default 'dipilih' ditambahkan ke tautan.
Ada intinya di sini: https://gist.github.com/3279194
UPDATE: Sekarang ini adalah permata: http://rubygems.org/gems/nav_link_to
sumber
Saya menggunakan penolong sederhana seperti ini untuk tautan tingkat atas sehingga
/stories/my-story
halaman menyoroti/stories
tautan tersebutsumber
Izinkan saya menunjukkan solusi saya:
_header.html.erb :
application_helper.rb :
application_controller.rb :
sumber
Menurut jawaban dari Skilldrick , saya akan mengubahnya menjadi yang berikut:
agar lebih bermanfaat.
sumber
Versi ini didasarkan pada versi @ Skilldrick tetapi memungkinkan Anda untuk menambahkan konten html.
Dengan demikian, Anda dapat melakukan:
nav_link "A Page", a_page_path
tetapi juga:
atau konten html lainnya (Anda dapat menambahkan ikon misalnya).
Di sini penolongnya adalah:
sumber
Saya rasa saya menemukan solusi sederhana yang mungkin berguna untuk banyak kasus penggunaan. Ini memungkinkan saya:
link_to
(misalnya menambahkan ikon di dalam tautan)application_helper.rb
active
ke seluruh nama kelas dari elemen tautan alih-alih menjadi satu-satunya kelas.Jadi, tambahkan ini ke
application_helper.rb
:Dan pada template Anda, Anda dapat memiliki sesuatu seperti ini:
Sebagai bonus, Anda dapat menentukan atau tidak
class_name
dan menggunakannya seperti ini:<div class="<%= current_page?(root_path) %>">
Berkat jawaban sebelumnya 1 , 2 , dan sumber daya .
sumber
semua ini bekerja dengan bilah navigasi sederhana, tetapi bagaimana dengan sub-menu tarik-turun? ketika sub-menu dipilih, item menu teratas harus dibuat 'terkini' dalam hal ini tab_on_rails saya menjadi solusinya
sumber
Ini adalah bagaimana saya menyelesaikan proyek saya saat ini.
Kemudian..
sumber
Cara saya yang mudah -
application.html.erb
,main_controller.erb
,Terima kasih.
sumber
Jika Anda juga ingin mendukung hash opsi html dalam tampilan. Misalnya jika Anda ingin memanggilnya dengan id atau kelas CSS lain, Anda dapat menentukan fungsi helper seperti ini.
Jadi dalam tampilan, panggil helper ini dengan cara yang sama seperti Anda memanggil link_to helper
sumber
Buat metode
ApplicationHelper
seperti di bawah ini.Sekarang gunakan dalam tampilan seperti kasus penggunaan di bawah ini.
1. Untuk semua tindakan pengontrol tertentu
2. Untuk semua tindakan banyak pengontrol (dengan dipisahkan koma)
3. Untuk tindakan spesifik dari setiap pengontrol tertentu
4. Untuk tindakan spesifik dari banyak pengontrol (dengan dipisahkan koma)
5. Untuk beberapa tindakan khusus dari setiap pengontrol tertentu
6. Untuk beberapa tindakan tertentu dari banyak pengontrol (dengan dipisahkan koma)
Semoga membantu
sumber