답변:
당신의 견해에서 다음과 같이하십시오 :
<% 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
and 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" %>
레이아웃과 페이지 템플리트가 구문 분석되는 방식으로 인해 레이아웃이 렌더링되기 전에 @ title = "Home"이 평가됩니다.
모범 사례는 content_for를 사용하는 것입니다.
먼저 두 가지 도우미 메소드를 추가하십시오 (예 : 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
그런 다음 레이아웃보기에서 간단히 사용할 수 있습니다.
<title><%= page_title %></title>
...보기 자체에서 :
<%= page_heading "Awesome" %>
이 방법을 사용하면 제목에 h1 태그를 붙인 위치를 섞을 수 있으며 컨트롤러에 성가신 @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
이 주석이 작성된 시점에서 를 사용할 때 발생했던 상황 입니다. 나는 이것이 더 이상 사실이 아니라고 생각하지만 최근에 보지 않았다. Toby J의 의견은 오늘의 Rails에 맞습니다. 원래 답변을 업데이트하겠습니다.
@opsb 및보다 완전한 @FouZ 형식 개선 :
에서 application.html.erb
:
<title><%= @title || "Default Page Title" %></title>
erb 파일 또는 해당 컨트롤러에서 :
<% @title = "Unique Page Title" %>
살펴보기 content_for
: http://railscasts.com/episodes/8
만족시키려는 사용 사례 또는 요구 사항에 대한 자세한 내용없이 몇 가지 대안을 생각할 수 있습니다.
1) 레이아웃 페이지 중 하나에서 제목을 전환하고 저장된 도우미 메소드를 사용하십시오. application_helper.rb
<title><%= custom_title %></title>
이 방법은 각 레이아웃 페이지에 고유 한 제목을 제공합니다.
2) Railscasts는 HEAD 태그 사이에 표시되는 부분을로드하기 위해 부분을 사용하도록 제안합니다.
3) load 이벤트 후에 제목을 변경해야하는 경우 javascript / ajax 호출을 사용하여 DOM을 조작하십시오.
title
요소로 태그가 지정된 컨텐츠를 변경하고 싶지 않을 수도 있습니다 . 아마도 사용자는 사이트 탐색 계층과 관련하여 사용자가 항상 어디에 있는지 알 수 있도록 일종의 사이트 이동 경로가 필요할 수 있습니다. goldberg plugin이 어떻게 작동하는지 잘 알고 있지만 동일한 기능을 수행하는 다른 방법이있을 것입니다.
컨트롤러의 before_filter에서 설정할 수도 있습니다.
# 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 메소드 에서 조건 을 설정하여 컨트롤러에서 다른 조치에 대해 다른 제목을 설정할 수 있습니다 . 컨트롤러 내에서 모든 관련 페이지 제목을 볼 수있는 것이 좋습니다.
나는 사용한다 이 플러그인이 Rails 헬퍼들은 다음과 같이 썼습니다 : 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%>
2. 제목 태그 내의 application.html.erb 사용법
<title><%=yield :page_title %></title>
삼 . application.html.erb를 제외한 각각의 * .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 %>
아주 간단한 변형을 추가하고 싶습니다.
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" %>
보기에서.