Каков наилучший способ создания пользовательского заголовка для страниц в приложении Rails без использования плагина?
ruby-on-rails
ruby
wusher
источник
источник
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>
в макете и<% content_for :title, "Conditional title" %>
в представлениях.<h1><%= content_for(:title, "Title for specific page") %></h1>
я не вижу ничего, что выводится в мой DOM (т.е. у меня<h1></h1>
нет содержимого). Однако мой<title>Title for specific page</title>
работает правильно. Любые идеи?Вот простой вариант, который мне нравится использовать
В вашем макете
И в верхней части страницы шаблона (первая строка)
Из-за способа анализа макета и шаблонов страницы @ title = "Home" оценивается до отображения макета.
источник
Лучшая практика - использовать content_for.
Сначала добавьте пару вспомогательных методов (например, вставьте в app / helpers / application_helper.rb):
Тогда в вашем макете вы можете просто использовать:
... и в самом представлении:
Этот способ имеет то преимущество, что позволяет вам перетасовывать туда, где вы прикрепляете тег 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
, во время написания этого комментария. Я считаю, что это больше не так, но я не смотрел в последнее время. Комментарий Тоби Дж является правильным для сегодняшних Rails. Я обновлю свой оригинальный ответ.Улучшение @opsb и более полная форма @FouZ :
В
application.html.erb
:В файле представления erb или его контроллере:
источник
Посмотрите на
content_for
: http://railscasts.com/episodes/8источник
Без дополнительной информации о сценарии использования или требованиях, которые вы пытаетесь удовлетворить, я могу придумать несколько альтернатив:
1) Переключите заголовок на одной из ваших страниц макета и используйте вспомогательный метод, хранящийся в
application_helper.rb
Этот подход даст вам уникальный заголовок для каждой страницы макета.
2) Railscasts предлагает использовать частичное для загрузки того, что отображается между тегами HEAD
3) Используйте вызовы javascript / ajax для манипулирования DOM, если вам нужно изменить заголовок после события загрузки.
Возможно, вы на самом деле не хотите менять содержимое, помеченное
title
элементом. Возможно, вам действительно нужны какие-то хлебные крошки, чтобы ваши пользователи всегда знали, где они находятся относительно иерархии навигации вашего сайта. Хотя я хорошо справился с плагином goldberg, я уверен, что есть и другие способы реализовать ту же функциональность.источник
Я использую nifty_generator "nifty_layout", который предоставляет переменную title, которую я могу затем вызвать на странице, используя:
<% title "Title of page" %>
Я также могу позволить пользователю
<% title "Title of page", false %>
отображать заголовок только в заголовке браузера, а не на самой странице.источник
Вы также можете установить его в before_filter в вашем контроллере.
Затем вы можете установить условия в методе 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
2 Использование в application.html.erb внутри тега title
3 Использование в соответствующем * .html.erb, исключая application.html.erb. Просто вставьте это в любой .html.erb и укажите заголовок страницы.
источник
Короче говоря, я могу записать это следующим образом
источник
Мне нравится метод opsb, но этот метод тоже работает.
источник
Лучший / чистый способ сделать это:
источник
Я хотел бы добавить свой довольно простой вариант.
В ApplicationController определите этот метод:
После этого вы можете вызвать get_title из тега заголовка вашего макета. Вы можете определить более конкретный заголовок для своей страницы, определив переменную @action_title_name в своих действиях.
источник