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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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 <matt.mart...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org 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.
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 <cunhe...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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 <matt.mart...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org 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.