Content_for la passerelle dans les vues

édité Le 20/10/2009 à 13:53 par Trinoo

vue

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 %>
et
<%end %>
Là, il faut que je fasse de même pour les METATAG "description" et "keywords".

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>
.....

Commentaires

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.

Auteur*

Site Web (facultatif)

Contenu