To accept content, showing default if none, in your layout
<%= content_for?(:meta_block) ? yield(:meta_block) : meta_block $>

Called in your content.html.erb that uses the above layout.
<%= content_for(:meta_block) do $>
  <%= meta_block("Yield", "Got it now!)%>
<% end %>

On Oct 18, 4:08 am, Nathan Wu <[email protected]> wrote:
> module LayoutHelper
>   def title(page_title, show_title = true)
>     content_for(:title) { h(page_title.to_s) }
>     @show_title = show_title
>   end
>
>   def show_title?
>     @show_title
>   end
>
>   def stylesheet(*args)
>     content_for(:head) { stylesheet_link_tag(*args) }
>   end
>
>   def javascript(*args)
>     content_for(:head) { javascript_include_tag(*args) }
>   end
> end
>
> <!DOCTYPE
> html>
> <html>
>
> <head>
>     <title><%= content_for?(:title) ? yield(:title) : "Untitled" %></
> title>
>     <%= stylesheet_link_tag :application
> %>
>     <%= javascript_include_tag :application
> %>
>     <%= csrf_meta_tag
> %>
>     <%= yield(:head)
> %>
>   </
> head>
>
> <body>
>     <div
> id="container">
>       <% if logged_in?
> %>
>       Welcome <%= current_user.username
> %>.
>       <%= link_to "Edit profile", edit_current_user_path %>
> or
>       <%= link_to "Log out", logout_path
> %>
>       <% else
> %>
>       <%= link_to "Sign up", signup_path %>
> or
>       <%= link_to "log in", login_path
> %>.
>       <% end
> %>
>       <% flash.each do |name, msg|
> %>
>         <%= content_tag :div, msg, :id => "flash_#{name}"
> %>
>       <% end
> %>
>       <%= content_tag :h1, yield(:title) if show_title?
> %>
>       <%= yield
> %>
>     </
> div>
>   </
> body>
> </html>
>
> check this out
>
> On Oct 18, 9:19 am, Matt Martini <[email protected]> wrote:
>
>
>
>
>
>
>
> > I am trying to generate meta tags based on the page. The meta_block call
> > in somepage.html.erb sets :meta_block and it is correctly yielded in
> > application.html.erb (except that only the last line is output).
>
> > But when otherpage.html.erb is rendered, because I don't call meta_block
> > there is no meta content output. I thought the "|| meta_block" would
> > cause the helper to be called if :meta_block was not set.
>
> > How do I get all of the metat tags to be output on the page, and how do
> > I get it to happen if there are no per page keywords and description?
>
> > Thanks,
>
> > Matt
>
> > #application_helpers.rb
> >   def meta_block(description = '', keywords = '')
> >     tag('meta', :'http-equiv' => 'Content-Type', :content => 'text/html; 
> > charset=utf-8')
> >     tag('meta', :'http-equiv' => 'Content-Language', :content => 'en-US,en')
> >     tag('meta', :name => 'description', :content => SITE[:DESCRIPTION] + 
> > description)
> >     tag('meta', :name => 'keywords', :content => SITE[:KEYWORDS] + keywords)
> >     tag('meta', :name => 'robots', :content => 'all')
> >   end
>
> > #somepage.html.erb
> > <% meta_block("My per page description.","keywords, for this, page") %>
> > some page's content
> > ...
>
> > #otherpage.html.erb
> > other-page's content
> > ...
>
> > #application.html.erb
> > <!DOCTYPE html>
> > <html>
> > <head>
> >   <title>My Application</title>
> >   <%= yield(:meta_block) || meta_block %>
> >   <%= stylesheet_link_tag    "application" %>
> >   <%= javascript_include_tag "application" %>
> >   <%= csrf_meta_tags %>
> > </head>
> > <body>
> >   <div id="container">
> >     <%= yield %>
> >   </div>
> > </body>
> > </html>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to