programing

Rails: 페이지 제목을 변경하는 방법은 무엇입니까?

newsource 2023. 6. 19. 21:37

Rails: 페이지 제목을 변경하는 방법은 무엇입니까?

플러그인을 사용하지 않고 레일즈 앱에서 페이지에 대한 사용자 지정 제목을 만드는 가장 좋은 방법은 무엇입니까?

다음과 같은 작업을 수행할 수 있습니다.

<% 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)다른 사람들이 이미 제안한 것처럼 도우미 메소드의 문.그러나 이와 같은 간단한 경우에는 사용자 지정 도우미 없이 필요한 코드를 특정 보기에 직접 입력하고 싶습니다.

사용하고 싶은 간단한 옵션은 다음과 같습니다.

레이아웃에서

<head>
  <title><%= @title %></title>
</head>

페이지 템플릿의 맨 위에 있습니다(첫 줄).

<% @title="Home" %>

레이아웃 및 페이지 템플릿이 구문 분석되는 방식 때문에 @prefix="홈"은 레이아웃이 렌더링되기 전에 평가됩니다.

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 태그를 부착하는 곳에서 셔플할 수 있는 장점이 있으며 컨트롤러를 멋지고 성가신 @제목 변수 없이 유지할 수 있습니다.

@opsb의 개선 및 @FouZ의 보다 완전한 형태:

application.html.erb:

<title><%= @title || "Default Page Title" %></title>

Viewerb 파일 또는 해당 컨트롤러에서 다음을 수행합니다.

<% @title = "Unique Page Title" %>

들다기에 대해 .content_for: http://railscasts.com/episodes/8

귀하가 충족하고자 하는 사용 사례 또는 요구 사항에 대한 자세한 내용이 없다면 다음과 같은 몇 가지 대안을 생각해 볼 수 있습니다.

중 이아웃페중하나제서전목다환을음저고도에 저장된 합니다.application_helper.rb

<title><%= custom_title %></title>

이 접근 방식은 각 레이아웃 페이지에 대해 고유한 제목을 제공합니다.

레일캐스트는 부분을 사용하여 HEAD 태그 사이에 표시되는 내용을 로드할 것을 제안합니다.

로드 이벤트 후 제목을 변경해야 할 경우 javascript/ajax 호출을 사용하여 DOM을 조작합니다.

아마도 당신은 정말로 태그된 콘텐츠를 변경하고 싶지 않을 것입니다.title사용자계층 알 수 , 로 필요할 입니다.사용자들이 사이트의 탐색 계층 구조와 관련하여 자신이 어디에 있는지 항상 알 수 있도록, 아마도 당신은 일종의 빵 부스러기가 정말로 필요할 것입니다.Goldberg 플러그인을 사용하는 방법을 잘 수행했지만, 동일한 기능을 수행하는 다른 방법이 있을 것이라고 확신합니다.

이 간단한 접근 방식은 기본 제목을 설정하지만 원하는 경우 언제든지 제목을 재정의할 수 있습니다.

app/views/layouts/application.html.erb:

<title><%= yield(:title) || 'my default title' %></title>

기본값을 재정의하려면 원하는 보기에 이 파일을 배치합니다.

<% content_for :title, "some new title" %>

다음을 사용하여 페이지에서 호출할 수 있는 제목 변수를 제공하는 nifty_generator의 "nifty_layout"을 사용합니다.

<% title "Title of page" %>

사용할 수도 있습니다.<% title "Title of page", false %>페이지 자체가 아닌 브라우저 제목으로만 제목을 표시합니다.

컨트롤러의 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 메서드에서 조건을 설정하여 컨트롤러의 다른 작업에 대해 다른 제목을 설정할 수 있습니다.컨트롤러 내에서 모든 관련 페이지 제목을 볼 수 있어 좋습니다.

내용을 사용한 페이지 제목 지정 접근법_방법 및 부분

1. partial name : _page_details.details.erb

<%content_for :page_title do %>
 <%=title%>
<%end%>

2. application.html.erb inside title 태그의 사용법

   <title><%=yield :page_title %></title>

3. application.html.erb를 제외한 각 *.html.erb의 사용.html.erb 페이지의 아무 .html.erb 및 공급 제목에 이것을 붙이기만 하면 됩니다.

    e.g : inside index.html.erb

    <%=render '_page_title', title: 'title_of_page'%>

이미 여러 개의 좋은 답변이 있지만 레일 7에서 여러 개의 답변을 조합하여 이 문제를 해결한 방법은 다음과 같습니다.이 솔루션은 다음과 같습니다.

  • 제어를 합니다.
    " title 제목: " 의멋진사지정자제목용예"
  • 됩니다.
    "-": "항목 - 항앱"
  • 됩니다.
    "내 앱 내: "앱예"
  • 위의 모든 항목을 현지화합니다.

세우다

현지화

# config/locales/en.yml
en:
  layouts:
    application:
      site_title: "My App"

템플릿의 논리

# app/views/layouts/application.html.erb
<title>
  <%= yield(:title).presence ||
      [yield(:page_title).presence, t(".site_title")].compact.join(" - ") %>
</title>

도우미의 논리

치를확니다인에서 스위치를 합니다.yieldcontent_for

# app/views/layouts/application.html.erb
<title><%= show_title %></title>

# app/helpers/application_helper.rb
module ApplicationHelper
  def show_title
    content_for(:title).presence ||
      [content_for(:page_title).presence, t(".site_title")].compact.join(" - ")
  end
end

사용.

전체 사용자 지정 제목

# app/views/static_pages/welcome.html.erb
<% content_for :title, "My awesome custom title" %>

# or localised...
# <% content_for :title, t(".custom_title") %>

# Outputs:
# <title>My awesome custom title</title>

페이지 제목(사이트가 자동으로 추가됨)

# app/views/products/index.html.erb
<% content_for :page_title, "Items" %>

# or localised...
# <% content_for :page_title, t("Products.model_name.human") %>

# Outputs:
# <title>Items - My App</title>

기본 페이지 제목

# No "content_for" specified

# Outputs:
# <title>My App</title>

논리에 대한 참고 사항

  • .presence 문자열: 빈문열돌데예필다니합요리는을자예(다▁(▁empty▁is)을 돌리기 위해 합니다.yield(:title) be) into nils) ▁might서져어엉.
  • 한다면yield(:title).presence0이다, 0은 0입니다.||의 반대쪽을 평가하라고 말합니다.
  • 다른 쪽에서는 페이지 제목과 사이트 제목의 배열로 시작합니다.
  • .compact " - 으로 끝나지 를 제거합니다.
  • '. . . . . " - " )는 하이픈으로 구분된 항목이 둘 이상이면 조인하고, 하나만 있으면 수정되지 않은 유일한 항목을 반환하고, 배열이 비어 있으면 빈 문자열을 반환합니다.

간단히 말해서, 저는 이것을 다음과 같이 적을 수 있습니다.

<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>

저는 opsb의 방법을 좋아하지만, 이 방법도 효과가 있습니다.

<% provide(:title,"ttttttttttttttttttZ") %>
<html>
  <head><title><%= yield(:title) %></title></head>
   <body></body>
</html>

저는 항상 현재 페이지에 대한 번역이 제공되도록 하고 싶었습니다.

이것이 제가 생각해 낸 것입니다.app/views/layouts/application.html.erb:

    <title>
      <%= translate("#{controller_name}.#{action_name}.site_title", raise: true) %>
    </title>

이렇게 하면 항상 현재 보기에 대한 변환이 검색되고 찾을 수 없는 경우 오류가 발생합니다.

기본값을 원하는 경우 다음을 수행할 수 있습니다.

    <title>
      <%= translate("#{controller_name}.#{action_name}.site_title", 
          default: translate(".site_title")) %>
    </title>

는 이 플러그인을 사용합니다. 제가 작성한 레일즈 도우미: http://web.archive.org/web/20130117090719/http ://henrik.nyh.se/2007/11/my-rails-title-helpers/

이를 위한 최선의/깨끗한 방법:

<title><%= @page_title or 'Page Title' %></title>

저는 제 꽤 간단한 변형을 추가하고 싶습니다.

Application Controller에서 다음 방법을 정의합니다.

  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 변수를 정의하여 페이지에 대한 보다 구체적인 제목을 정의할 수 있습니다.

언급URL : https://stackoverflow.com/questions/185965/rails-how-to-change-the-title-of-a-page