जवाबों:
आपके विचारों में ऐसा कुछ है:
<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>
निम्नलिखित लेआउट फ़ाइल में जाता है:
<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>
सहायक विधियों में (और जैसा कि दूसरों ने पहले ही सुझाव दिया है) बयान content_forऔर yield(:title)बयान देना संभव है । हालांकि, इस तरह के एक के रूप में सरल मामलों में मैं कस्टम कोड के बिना विशिष्ट विचारों में सीधे आवश्यक कोड डालना पसंद करता हूं।
<h1><%= content_for(:title, "Title for specific page") %></h1>हूं तो मुझे अपने DOM में कुछ भी आउटपुट दिखाई नहीं देता है (अर्थात मेरे पास <h1></h1>इसमें कोई सामग्री नहीं है)। हालाँकि मेरा <title>Title for specific page</title>काम सही ढंग से चल रहा है। कोई विचार?
यहाँ एक सरल विकल्प है जिसका उपयोग करना मुझे अच्छा लगता है
अपने लेआउट में
<head>
<title><%= @title %></title>
</head>
और आपके पृष्ठ के शीर्ष पर (पहली पंक्ति)
<% @title="Home" %>
जिस तरह से लेआउट और पेज टेम्प्लेट को @ शीर्षक = "होम" के रूप में प्रस्तुत किया जाता है, लेआउट के प्रस्तुत होने से पहले मूल्यांकन किया जाता है।
सबसे अच्छा अभ्यास content_for का उपयोग करना है।
सबसे पहले, सहायक विधियों का एक जोड़ा (यानी ऐप / हेल्पर्स / 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
फिर अपने लेआउट दृश्य में आप बस उपयोग कर सकते हैं:
<title><%= page_title %></title>
... और दृश्य में ही:
<%= page_heading "Awesome" %>
इस तरह से आपको अपने शीर्षक के लिए h1 टैग को चिपकाने के लिए आपको फेरबदल करने की अनुमति देने का लाभ है, और आपके नियंत्रक को अच्छा और pesky @title चर से मुक्त रखता है।
@content_for_title?
@content_for_title। होना चाहिए (content_for(:title) + ' — ' if content_for?(:title)).to_s + 'My Cool Site'। फिर इसे अपने दृष्टिकोण से सेट करने के लिए, बस<% content_for :title, 'My Page Title' %>
@content_for_titleयह तब होता है जब आपने प्रयोग किया था content_for, उस समय यह टिप्पणी लिखी गई थी। मेरा मानना है कि यह अब मामला नहीं है, लेकिन मैंने हाल ही में नहीं देखा है। टोबी जे की टिप्पणी आज की रेल के लिए सही है। मैं अपना मूल उत्तर अपडेट करूंगा।
पर एक सुधार @opsb और की एक अधिक पूर्ण रूप @FouZ की:
इन application.html.erb:
<title><%= @title || "Default Page Title" %></title>
दृश्य एरब फ़ाइल या इसके नियंत्रक में:
<% @title = "Unique Page Title" %>
में देखें content_for: http://railscasts.com/episodes/8
उपयोग-मामले या आवश्यकताओं के बारे में अधिक जानकारी के बिना जिन्हें आप संतुष्ट करने का प्रयास कर रहे हैं, मैं कई विकल्पों के बारे में सोच सकता हूं:
1) अपने लेआउट पृष्ठों में से एक में शीर्षक स्विच करें और एक सहायक विधि संग्रहीत करें application_helper.rb
<title><%= custom_title %></title>
यह दृष्टिकोण आपको प्रत्येक लेआउट पृष्ठ के लिए एक अद्वितीय शीर्षक देगा।
2) RAILcasts एक आंशिक का उपयोग करके सुझाव देता है कि HEAD टैग के बीच क्या दिखाया जाए
3) लोड घटना के बाद शीर्षक बदलने की आवश्यकता होने पर डोम में हेरफेर करने के लिए जावास्क्रिप्ट / अजाक्स कॉल का उपयोग करें।
हो सकता है कि आप वास्तव में titleतत्व द्वारा टैग की गई सामग्री को बदलना न चाहें । शायद आपको वास्तव में कुछ प्रकार के ब्रेडक्रंब की आवश्यकता होती है, ताकि आपके उपयोगकर्ता हमेशा यह जान सकें कि वे आपकी साइट के नेविगेशन पदानुक्रम के संबंध में कहां हैं। जबकि मैंने गोल्डबर्ग प्लगइन के साथ ठीक किया है, मुझे यकीन है कि उसी कार्यक्षमता को खींचने के अन्य तरीके हैं।
मैं nifty_generator के "nifty_layout" का उपयोग करता हूं जो एक शीर्षक चर के साथ प्रदान करता है जिसे मैं उपयोग करने वाले पेज पर कॉल कर सकता हूं:
<% title "Title of page" %>
मैं उपयोगकर्ता <% title "Title of page", false %>को शीर्षक केवल ब्राउज़र शीर्षक में दिखा सकता हूं और पृष्ठ में ही नहीं।
आप इसे अपने नियंत्रक में पहले_फिल्टर में भी सेट कर सकते हैं।
# 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>
फिर आप नियंत्रक में अलग-अलग क्रियाओं के लिए अलग शीर्षक सेट करने के लिए set_title विधि में स्थितियाँ निर्धारित कर सकते हैं । आपके नियंत्रक के सभी प्रासंगिक पृष्ठ शीर्षक देखने में सक्षम होना अच्छा है।
मैं उपयोग करता हूं इस प्लगइनइन रेल सहायकों को मैंने लिखा: http://web.archive.org/web/20130117090719/http://henrik.nyh.se/2007/11/my-rails-title-helpers/
पृष्ठ के लिए दृष्टिकोण content_for विधि और एक आंशिक का उपयोग करके शीर्षक
1 है। आंशिक नाम: _page_title.html.erb
<%content_for :page_title do %>
<%=title%>
<%end%>
२। टाइटल टैग के अंदर application.html.erb में उपयोग
<title><%=yield :page_title %></title>
३। संबंधित में उपयोग *। Html.erb को छोड़कर application.html.erb बस इसे किसी भी .html.erb और पेज के शीर्षक शीर्षक में चिपका दें
e.g : inside index.html.erb
<%=render '_page_title', title: 'title_of_page'%>
संक्षेप में, मैं इसे नीचे के रूप में लिख सकता हूं
<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>
मुझे ऑप्सब का तरीका पसंद है, लेकिन यह तरीका भी काम करता है।
<% provide(:title,"ttttttttttttttttttZ") %>
<html>
<head><title><%= yield(:title) %></title></head>
<body></body>
</html>
मैं अपने सुंदर सरल संस्करण को जोड़ना चाहूंगा।
ApplicationController में इस विधि को परिभाषित:
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
उसके बाद आप अपने लेआउट के शीर्षक टैग से get_title को कॉल कर सकते हैं। आप अपने कार्यों में @action_title_name चर को परिभाषित करके अपने पृष्ठ के लिए अधिक विशिष्ट शीर्षक को परिभाषित कर सकते हैं।
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>लेआउट<% content_for :title, "Conditional title" %>में और विचारों में।