W swoich widokach zrób coś takiego:
<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>
W pliku układu znajdują się następujące informacje:
<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>
Możliwe jest również hermetyzowanie instrukcji content_for
i yield(:title)
w metodach pomocniczych (jak już sugerowali inni). Jednak w prostych przypadkach, takich jak ten, lubię umieszczać niezbędny kod bezpośrednio w określonych widokach bez niestandardowych pomocników.
Christoph Schiessl
źródło
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>
w układzie i<% content_for :title, "Conditional title" %>
w widokach.<h1><%= content_for(:title, "Title for specific page") %></h1>
, nie widzę żadnych danych wyjściowych do mojego DOM (tj. Nie mam<h1></h1>
w nim żadnej treści). Jednak mój<title>Title for specific page</title>
działa poprawnie. Jakieś pomysły?Oto prosta opcja, której lubię używać
W twoim układzie
U góry szablonu strony (pierwsza linia)
Ze względu na sposób analizowania układu i szablonów stron @ title = "Strona główna" jest oceniana przed renderowaniem układu.
źródło
Najlepszą praktyką jest użycie content_for.
Najpierw dodaj kilka metod pomocniczych (np. Stick in app / helpers / application_helper.rb):
Następnie w widoku układu możesz po prostu użyć:
... iw samym widoku:
Ten sposób ma tę zaletę, że pozwala tasować miejsce, w którym wstawiasz tag h1 dla swojego tytułu, i utrzymuje kontroler w ładnym i wolnym od brzydkich zmiennych @title.
źródło
@content_for_title
?@content_for_title
. Powinien być(content_for(:title) + ' — ' if content_for?(:title)).to_s + 'My Cool Site'
. Następnie, aby ustawić to z widoku, po prostu<% content_for :title, 'My Page Title' %>
@content_for_title
jest to, co działo się, gdy używałeścontent_for
, w czasie pisania tego komentarza. Wydaje mi się, że już tak nie jest, ale ostatnio nie szukałem. Komentarz Toby'ego J jest poprawny dla dzisiejszych Railsów. Zaktualizuję moją pierwotną odpowiedź.Ulepszenie @opsb i bardziej kompletna forma @FouZ :
W
application.html.erb
:W widoku pliku erb lub jego kontrolera:
źródło
Zajrzyj na
content_for
: http://railscasts.com/episodes/8źródło
Bez dalszych szczegółów na temat przypadku użycia lub wymagań, które próbujesz spełnić, mogę wymyślić kilka alternatyw:
1) Zmień tytuł na jednej ze swoich stron układu i użyj metody pomocniczej przechowywanej w
application_helper.rb
Takie podejście zapewni unikalny tytuł dla każdej strony układu.
2) Railscasts sugeruje użycie częściowej do załadowania tego, co pojawia się między tagami HEAD
3) Użyj wywołań javascript / ajax, aby manipulować DOM, jeśli chcesz zmienić tytuł po zdarzeniu load.
Może tak naprawdę nie chcesz zmieniać treści oznaczonej przez
title
element. Być może naprawdę potrzebujesz jakiegoś menu nawigacyjnego, aby użytkownicy zawsze wiedzieli, gdzie się znajdują w odniesieniu do hierarchii nawigacji w Twojej witrynie. Chociaż dobrze poradziłem sobie z wtyczką goldberga, jestem pewien, że istnieją inne sposoby uzyskania tej samej funkcjonalności.źródło
Używam „nifty_layout” nifty_generator, który zawiera zmienną tytułu, którą mogę wywołać na stronie za pomocą:
<% title "Title of page" %>
Mogę również,
<% title "Title of page", false %>
aby tytuł był wyświetlany tylko w tytule przeglądarki, a nie na samej stronie.źródło
Możesz również ustawić go w filtrze before_filter w kontrolerze.
Następnie możesz ustawić warunki w metodzie set_title , aby ustawić różne tytuły dla różnych akcji w kontrolerze. Fajnie jest widzieć wszystkie odpowiednie tytuły stron w kontrolerze.
źródło
używam
ta wtyczkatych pomocników Rails, które napisałem: http://web.archive.org/web/20130117090719/http://henrik.nyh.se/2007/11/my-rails-title-helpers/źródło
podejście do tytułów stron przy użyciu metody content_for i częściowej
1. nazwa częściowa: _page_title.html.erb
2. Wykorzystanie w application.html.erb w tagu tytułowym
3. Użycie w odpowiednim * .html.erb z wyłączeniem application.html.erb Po prostu umieść to w dowolnym .html.erb i podaj tytuł strony
źródło
Krótko mówiąc, mogę to zapisać w następujący sposób
źródło
Podoba mi się metoda Opsb, ale ta metoda też działa.
źródło
Najlepszy / czysty sposób na zrobienie tego:
źródło
Chciałbym dodać mój całkiem prosty wariant.
W ApplicationController zdefiniuj tę metodę:
Następnie możesz wywołać get_title z tagu tytułu swojego układu. Możesz zdefiniować bardziej szczegółowy tytuł swojej strony, definiując zmienną @action_title_name w swoich działaniach.
źródło