Apa cara terbaik untuk membuat judul khusus untuk halaman di aplikasi Rails tanpa menggunakan plug-in?
Apa cara terbaik untuk membuat judul khusus untuk halaman di aplikasi Rails tanpa menggunakan plug-in?
Jawaban:
Dalam pandangan Anda, lakukan sesuatu seperti ini:
<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>
Berikut ini ada dalam file tata letak:
<head>
<title><%= yield(:title) %></title>
<!-- Additional header tags here -->
</head>
<body>
<!-- If all pages contain a headline tag, it's preferable to put that in the layout file too -->
<h1><%= yield(:title) %></h1>
</body>
Dimungkinkan juga untuk merangkum pernyataan content_for
dan yield(:title)
dalam metode pembantu (seperti yang telah disarankan orang lain). Namun, dalam kasus-kasus sederhana seperti ini saya suka memasukkan kode yang diperlukan langsung ke tampilan spesifik tanpa bantuan kustom.
<h1><%= content_for(:title, "Title for specific page") %></h1>
saya tidak melihat output apa pun ke DOM saya (yaitu saya miliki <h1></h1>
tanpa konten di dalamnya). Namun saya <title>Title for specific page</title>
bekerja dengan benar. Ada ide?
Berikut adalah opsi sederhana yang ingin saya gunakan
Dalam tata letak Anda
<head>
<title><%= @title %></title>
</head>
Dan di bagian atas template halaman Anda (baris pertama)
<% @title="Home" %>
Karena cara tata letak dan templat halaman diuraikan @ title = "Home" dievaluasi sebelum tata letak diberikan.
Praktik terbaik adalah menggunakan content_for.
Pertama, tambahkan beberapa metode pembantu (mis. Tetap di app / helpers / application_helper.rb):
def page_title(separator = " – ")
[content_for(:title), 'My Cool Site'].compact.join(separator)
end
def page_heading(title)
content_for(:title){ title }
content_tag(:h1, title)
end
Kemudian dalam tampilan tata letak Anda, Anda cukup menggunakan:
<title><%= page_title %></title>
... dan dalam tampilan itu sendiri:
<%= page_heading "Awesome" %>
Cara ini memiliki keuntungan memungkinkan Anda untuk mengacak tempat Anda menempelkan tag h1 untuk judul Anda, dan menjaga pengontrol Anda tetap bagus dan bebas dari variabel @title sial.
@content_for_title
?
@content_for_title
. Seharusnya (content_for(:title) + ' — ' if content_for?(:title)).to_s + 'My Cool Site'
. Kemudian untuk mengaturnya dari pandangan Anda, cukup<% content_for :title, 'My Page Title' %>
@content_for_title
adalah apa yang biasa terjadi ketika Anda digunakan content_for
, pada saat komentar ini ditulis. Saya percaya ini bukan lagi masalahnya, tetapi saya belum melihat baru-baru ini. Komentar Toby J benar untuk Rails hari ini. Saya akan memperbarui jawaban asli saya.
Peningkatan pada @opsb dan bentuk yang lebih lengkap dari @FouZ :
Di application.html.erb
:
<title><%= @title || "Default Page Title" %></title>
Dalam tampilan erb file atau pengontrolnya:
<% @title = "Unique Page Title" %>
Lihatlah ke content_for
: http://railscasts.com/episodes/8
Tanpa perincian lebih lanjut tentang kasus penggunaan atau persyaratan yang Anda coba penuhi, saya dapat memikirkan beberapa alternatif:
1) Ganti judul di salah satu halaman tata letak Anda dan gunakan metode pembantu yang tersimpan application_helper.rb
<title><%= custom_title %></title>
Pendekatan ini akan memberi Anda judul unik untuk setiap halaman tata letak.
2) Railscast menyarankan menggunakan sebagian untuk memuat apa yang muncul di antara tag HEAD
3) Gunakan panggilan javascript / ajax untuk memanipulasi DOM jika Anda perlu mengubah judul setelah acara pemuatan.
Mungkin Anda tidak benar-benar ingin mengubah konten yang ditandai oleh title
elemen. Mungkin Anda benar-benar membutuhkan semacam remah roti, sehingga pengguna Anda selalu tahu di mana mereka berada sehubungan dengan hierarki navigasi situs Anda. Sementara saya sudah melakukannya dengan baik dengan cara plugin goldberg, saya yakin ada cara lain untuk melakukan fungsi yang sama.
Saya menggunakan "nifty_layout" dari nifty_generator yang menyediakan variabel judul yang dapat saya panggil di halaman menggunakan:
<% title "Title of page" %>
Saya juga dapat pengguna <% title "Title of page", false %>
agar judulnya hanya ditampilkan di judul browser dan bukan di halaman itu sendiri.
Anda juga bisa mengaturnya di before_filter di controller Anda.
# foo_controller.rb
class FooController < ApplicationController
before_filter :set_title
private
def set_title
@page_title = "Foo Page"
end
end
# application.html.erb
<h1><%= page_title %></h1>
Anda kemudian dapat mengatur kondisi dalam metode set_title untuk mengatur judul yang berbeda untuk tindakan yang berbeda di controller. Sangat menyenangkan bisa melihat semua judul halaman yang relevan di dalam pengontrol Anda.
saya menggunakan plugin inipembantu Rails yang saya tulis: http://web.archive.org/web/20130117090719/http://henrik.nyh.se/2007/11/my-rails-title-helpers/
pendekatan untuk pemberian judul halaman menggunakan metode content_for dan sebagian
1. nama parsial: _page_title.html.erb
<%content_for :page_title do %>
<%=title%>
<%end%>
2. Penggunaan di application.html.erb di dalam tag judul
<title><%=yield :page_title %></title>
3. Penggunaan di masing-masing * .html.erb tidak termasuk application.html.erb Cukup taruh ini di .html.erb dan berikan judul halaman
e.g : inside index.html.erb
<%=render '_page_title', title: 'title_of_page'%>
Singkatnya, saya bisa menuliskan ini sebagai berikut
<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>
Saya suka metode opsb, tetapi metode ini juga berfungsi.
<% provide(:title,"ttttttttttttttttttZ") %>
<html>
<head><title><%= yield(:title) %></title></head>
<body></body>
</html>
Saya ingin menambahkan varian yang cukup sederhana.
Dalam ApplicationController, tentukan metode ini:
def get_title
@action_title_name || case controller_name
when 'djs'
'Djs'
when 'photos'
'Photos'
when 'events'
'Various events'
when 'static'
'Info'
when 'club'
'My club'
when 'news'
'News'
when 'welcome'
'Welcome!'
else
'Other'
end
end
Setelah itu Anda dapat memanggil get_title dari tag judul tata letak Anda. Anda dapat mendefinisikan judul yang lebih spesifik untuk halaman Anda dengan mendefinisikan variabel @action_title_name dalam tindakan Anda.
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>
dalam tata letak dan<% content_for :title, "Conditional title" %>
tampilan.