Ein kleiner Helper für Seitentitel

Wie wär’s mit einem kleinen Helper zum Setzen des Seitentitels, der sowohl einen String als auch einen Block (mit HTML, das dann rausgesanitized wird) entgegen nimmt?

1
2
3
4
5
6
7
def set_page_title(title = nil, &block)
  if block_given?
    html = capture(&block)
    concat(html)
  end
  content_for(:title, title || strip_tags(html))
end

In einer HAML-View setzt man den Titel der Seite dann so:

1
- set_page_title "Neuer User"

Oder mit einem Block, der auch ausgegeben wird (aber im Titel werden alle HTML-Tags entfernt):

1
2
3
4
- set_page_title do
  %h1
    %strong Ein neuer User.
    Wie spannend!

Den Seitentitel kann man dann per yield :title ausgeben (idealerweise irgendwo im <title>-Tag.

Warum wird der Seitentitel überhaupt in einer View gesetzt? Weil er meiner Meinung nach die Angelegenheit eben dieser ist, und nicht des Controllers. So!

Update: mein Kollege Pascal wies mich völlig zurecht darauf hin, dass man den fertigen Titel konsequenter Weise per content_for und yield statt einer Instanzvariable übergeben sollte. Habe den Code entsprechend angepasst.

Posted in Programmierspaß
Tagged

One Comment

  1. wie schon über icq, mir persönlichg würde ein content_for :title im helper und ein yield(:title) doch etwas “sauberer” anmuten. ansonsten nais :)

Leave a Reply

Using Gravatars in the comments - get your own and be recognized!

XHTML: These are some of the tags you can use: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>