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.