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 rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Search Discussions

  • Nathan Wu at Oct 18, 2011 at 10:11 am
    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 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 rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
  • Ray Parker at Oct 18, 2011 at 12:42 pm
    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 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 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 rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouprubyonrails-talk @
categoriesrubyonrails
postedOct 18, '11 at 1:19a
activeOct 18, '11 at 12:42p
posts3
users3
websiterubyonrails.org
irc#RubyOnRails

People

Translate

site design / logo © 2022 Grokbase