Yanıtlar:
Sizce böyle bir şey yapın:
<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>
Düzen dosyasında aşağıdakiler bulunur:
<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>
Ayrıca content_for
ve yield(:title)
ifadelerini yardımcı yöntemlerle (diğerlerinin önerdiği gibi) kapsüllemek de mümkündür . Ancak, bu gibi basit durumlarda özel yardımcıları olmadan doğrudan belirli görünümlere gerekli kodu koymak istiyorum.
<h1><%= content_for(:title, "Title for specific page") %></h1>
DOM'uma hiçbir şey çıktı görmüyorum (yani <h1></h1>
içeriğim yok). Ancak benim <title>Title for specific page</title>
doğru çalışıyor. Herhangi bir fikir?
İşte kullanmak istediğim basit bir seçenek
Düzeninizde
<head>
<title><%= @title %></title>
</head>
Ve sayfa şablonunuzun üst kısmında (ilk satır)
<% @title="Home" %>
Düzen ve sayfa şablonlarının ayrıştırılma biçimi nedeniyle, düzen oluşturulmadan önce @ title = "Ana Sayfa" değerlendirilir.
En iyi yöntem content_for öğesini kullanmaktır.
İlk olarak, birkaç yardımcı yöntem ekleyin (ör. App / helpers / application_helper.rb dosyasına yapıştırma):
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
Ardından düzen görünümünüzde şunları kullanabilirsiniz:
<title><%= page_title %></title>
... ve görünümün kendisinde:
<%= page_heading "Awesome" %>
Bu şekilde, başlığınız için h1 etiketini yapıştırdığınız yere karıştırmanıza izin verir ve denetleyicinizi hoş ve sinir bozucu @title değişkenlerinden arındırır.
@content_for_title
?
@content_for_title
. Olmalı (content_for(:title) + ' — ' if content_for?(:title)).to_s + 'My Cool Site'
. Sonra sadece sizin görüşünüze göre ayarlamak için<% content_for :title, 'My Page Title' %>
@content_for_title
eskiden ne olduğu content_for
, bu yorum yazıldığı sırada olan şeydi. Bunun artık böyle olmadığına inanıyorum, ama son zamanlarda bakmadım. Toby J'nin yorumu bugünkü Rails için doğru. Orijinal cevabımı güncelleyeceğim.
Üzerinde bir iyileştirme @opsb ve daha kapsamlı bir şekilde @FouZ 'ler:
İçinde application.html.erb
:
<title><%= @title || "Default Page Title" %></title>
Görünüm erb dosyasında veya denetleyicisinde:
<% @title = "Unique Page Title" %>
Şuraya bakın content_for
: http://railscasts.com/episodes/8
Kullanmaya çalıştığınız kullanım durumu veya gereksinimler hakkında daha fazla ayrıntı olmadan, birkaç alternatif düşünebilirim:
1) Düzen sayfalarınızdan birinde başlığı değiştirin ve içinde depolanan bir yardımcı yöntem kullanın application_helper.rb
<title><%= custom_title %></title>
Bu yaklaşım size her düzen sayfası için benzersiz bir başlık verecektir.
2) Railscasts, HEAD etiketleri arasında görünenleri yüklemek için kısmi kullanılmasını önerir
3) load olayından sonra başlığı değiştirmeniz gerekirse DOM'yi değiştirmek için javascript / ajax çağrılarını kullanın.
Belki de title
öğe tarafından etiketlenen içeriği gerçekten değiştirmek istemezsiniz . Belki de gerçekten bir çeşit kırıntıya ihtiyacınız vardır, böylece kullanıcılarınız her zaman sitenizin gezinme hiyerarşisine göre nerede olduklarını bilirler. Goldberg eklentisinin nasıl yapıldığına rağmen, aynı işlevselliği çıkarmanın başka yolları olduğundan eminim.
Ben nifty_generator'ın "nifty_layout" kullanarak daha sonra kullanarak sayfada çağırabilirsiniz bir başlık değişkeni ile kullanın:
<% title "Title of page" %>
Ayrıca, kullanıcının <% title "Title of page", false %>
sayfanın kendisinde değil, yalnızca tarayıcı başlığında gösterilmesini sağlayabilirsiniz.
Ayrıca, denetleyicinizdeki bir before_filter öğesinde de ayarlayabilirsiniz.
# 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>
Daha sonra , denetleyicideki farklı eylemler için farklı başlıklar ayarlamak üzere set_title yönteminde koşulları ayarlayabilirsiniz. Kumandanızdaki tüm ilgili sayfa başlıklarını görmek güzel.
kullanırım bu eklentiyazdığım bu Rails yardımcıları: http://web.archive.org/web/20130117090719/http://henrik.nyh.se/2007/11/my-rails-title-helpers/
content_for yöntemi ve kısmi kullanarak sayfa başlıklandırma yaklaşımı
1. kısmi ad: _page_title.html.erb
<%content_for :page_title do %>
<%=title%>
<%end%>
2. Başlık etiketi içindeki application.html.erb dosyasında kullanım
<title><%=yield :page_title %></title>
3. Application.html.erb hariç ilgili * .html.erb içindeki kullanım.
e.g : inside index.html.erb
<%=render '_page_title', title: 'title_of_page'%>
Kısacası, bunu aşağıdaki gibi yazabilirim
<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>
Opsb'nin yöntemini seviyorum, ancak bu yöntem de çalışıyor.
<% provide(:title,"ttttttttttttttttttZ") %>
<html>
<head><title><%= yield(:title) %></title></head>
<body></body>
</html>
Oldukça basit varyantımı eklemek istiyorum.
ApplicationController'da bu yöntemi tanımlayın:
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
Bundan sonra düzeninizin başlık etiketinden get_title öğesini arayabilirsiniz. İşlemlerinizde @action_title_name değişkenini tanımlayarak sayfanız için daha spesifik bir başlık tanımlayabilirsiniz.
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>
düzende ve<% content_for :title, "Conditional title" %>
görünümlerde.