Content_for la passerelle dans les vues
édité Le 20/10/2009 à 13:53 par Trinoo
Dernièrement sous Trinoo.net, j'avais besoin de placer un titre pour chaque article et "News" dans la balise TITLE pour une meilleure visibilité sous Google. Les vues de ces deux catégories (articles et news) utilisent le même Layout du site par défaut : application.html.erb.
Il faut trouver un moyen de transmettre ce titre à partir des vues "show" et "index" que ce soit pour un article ou une news pour le placer dans le Layout "application.html.erb"
Voilà ce que ça donne dans la vue des articles "show.html.erb"
<% content_for :titlepage do %>Titre de la page<% end %>
<h1><%= @article.titre %></h1>
...........
Et comme il y a un titre pour chaque article dans la base de données, ça devient
<% content_for :titlepage do %><%= @article.bartitle %><% end %>
<h1><%= @article.titre %></h1>
............
Maintenant il faut qu'on arrive à transmettre la valeur dans le Layout
..........
<head>
<title><%= yield(:titlepage) || "Ruby on Rails" %> : Trinoo</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
..........
le "||" qui ressemble à une fonction XOR (ou exclusif) permet d'afficher "Ruby on Rails" si jamais le titre de la page est inexistant "nil"
L'utilité du content_for peut être utilisé dans d'autre concept au delà du TITLE d'une page du moment qu'on puisse placer tout ce qu'on veux entre
<% content_for :nom_du_contenu do %>
<%end %>
Ryan Bates, sous RailsCasts.com pousse encore loin l'optimisation en créant un helper général sous "application_helper.rb" pour simplifier le code dans les vues, voici le contenu du helper
# Methods added to this helper will be available to all templates in the application. module ApplicationHelper def title(page_title) content_for(:titlepage) { page_title } end end
de là, l'attribution du TITLE dans la vue devient
<% title "#{@article.bartitle}" %> <h1><%= @article.titre %></h1> .....
Ajouter un Commentaire
Les champs marqués par une * sont obligatoires.
Votre adresse de messagerie ne sera pas publiée et ne sera pas utilisée à des fins publicitaires.



Commentaires