Machen Sie aus Ihrer Sicht Folgendes:
<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>
Folgendes ist in der Layoutdatei enthalten:
<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>
Es ist auch möglich, die Anweisungen content_for
und yield(:title)
in Hilfsmethoden zu kapseln (wie andere bereits vorgeschlagen haben). In einfachen Fällen wie diesem möchte ich jedoch den erforderlichen Code ohne benutzerdefinierte Helfer direkt in die spezifischen Ansichten einfügen.
Christoph Schiessl
quelle
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>
im Layout und<% content_for :title, "Conditional title" %>
in den Ansichten.<h1><%= content_for(:title, "Title for specific page") %></h1>
sehe ich keine Ausgabe in meinem DOM (dh ich habe<h1></h1>
keinen Inhalt darin). Mein<title>Title for specific page</title>
funktioniert jedoch korrekt. Irgendwelche Ideen?Hier ist eine einfache Option, die ich gerne benutze
In Ihrem Layout
Und oben in Ihrer Seitenvorlage (erste Zeile)
Aufgrund der Art und Weise, wie das Layout und die Seitenvorlagen analysiert werden, wird @ title = "Home" ausgewertet, bevor das Layout gerendert wird.
quelle
Best Practice ist die Verwendung von content_for.
Fügen Sie zunächst einige Hilfsmethoden hinzu (z. B. bleiben Sie in app / helpers / application_helper.rb):
Dann können Sie in Ihrer Layoutansicht einfach Folgendes verwenden:
... und in der Ansicht selbst:
Auf diese Weise können Sie mischen, wo Sie das h1-Tag für Ihren Titel anbringen, und Ihr Controller bleibt schön und frei von lästigen @ title-Variablen.
quelle
@content_for_title
?@content_for_title
. Sollte sein(content_for(:title) + ' — ' if content_for?(:title)).to_s + 'My Cool Site'
. Dann, um es aus Ihrer Sicht einzustellen, einfach<% content_for :title, 'My Page Title' %>
@content_for_title
ist das, was früher passiert ist, als Siecontent_for
diesen Kommentar geschrieben haben. Ich glaube, das ist nicht mehr der Fall, aber ich habe in letzter Zeit nicht nachgesehen. Der Kommentar von Toby J ist für die heutigen Rails korrekt. Ich werde meine ursprüngliche Antwort aktualisieren.Eine Verbesserung von @opsb und eine vollständigere Form von @FouZ :
In
application.html.erb
:In der Ansicht erb Datei oder deren Controller:
quelle
Schauen Sie in
content_for
: http://railscasts.com/episodes/8quelle
Ohne weitere Details zum Anwendungsfall oder zu den Anforderungen, die Sie erfüllen möchten, kann ich mir mehrere Alternativen vorstellen:
1) Wechseln Sie den Titel auf einer Ihrer Layoutseiten und verwenden Sie eine in gespeicherte Hilfsmethode
application_helper.rb
Dieser Ansatz gibt Ihnen einen eindeutigen Titel für jede Layoutseite.
2) Railscasts schlägt vor, einen Teil zu verwenden, um zu laden, was zwischen den HEAD-Tags angezeigt wird
3) Verwenden Sie Javascript / Ajax-Aufrufe, um das DOM zu bearbeiten, wenn Sie den Titel nach dem Ladeereignis ändern müssen.
Vielleicht möchten Sie den vom
title
Element gekennzeichneten Inhalt nicht wirklich ändern . Vielleicht brauchen Sie wirklich eine Art Brotkrume, damit Ihre Benutzer immer wissen, wo sie sich in Bezug auf die Navigationshierarchie Ihrer Site befinden. Obwohl ich mit dem Goldberg-Plugin gut zurechtgekommen bin, gibt es sicher noch andere Möglichkeiten, die gleiche Funktionalität zu nutzen.quelle
Ich verwende das "nifty_layout" von nifty_generator, das eine Titelvariable enthält, die ich dann auf der Seite aufrufen kann, indem ich:
<% title "Title of page" %>
Ich kann den Benutzer auch
<% title "Title of page", false %>
dazu bringen, dass der Titel nur im Browsertitel und nicht auf der Seite selbst angezeigt wird.quelle
Sie können es auch in einem before_filter in Ihrem Controller einstellen.
Anschließend können Sie in der Methode set_title Bedingungen festlegen , um unterschiedliche Titel für unterschiedliche Aktionen in der Steuerung festzulegen . Es ist schön, alle relevanten Seitentitel in Ihrem Controller sehen zu können.
quelle
ich benutze
dieses PluginDiese Rails-Helfer habe ich geschrieben: http://web.archive.org/web/20130117090719/http://henrik.nyh.se/2007/11/my-rails-title-helpers/quelle
Ansatz für die Seitentitelung mit der Methode content_for und einem Teil
1. Teilname: _page_title.html.erb
2. Verwendung in application.html.erb innerhalb des Titel-Tags
3 . Verwendung in der jeweiligen * .html.erb ohne application.html.erb Stecken Sie diese einfach in eine beliebige .html.erb und geben Sie den Titel der Seite an
quelle
Kurz gesagt, ich kann dies wie folgt aufschreiben
quelle
Ich mag die Methode von opsb, aber diese Methode funktioniert auch.
quelle
Der beste / sauberste Weg, dies zu tun:
quelle
Ich möchte meine ziemlich einfache Variante hinzufügen.
Definieren Sie im ApplicationController diese Methode:
Danach können Sie get_title über das Titel-Tag Ihres Layouts aufrufen. Sie können einen spezifischeren Titel für Ihre Seite definieren, indem Sie in Ihren Aktionen die Variable @action_title_name definieren.
quelle