2010-03-26 5 views
23

J'utilise haml avec ma rails application et j'ai une question de savoir comment la meilleure façon d'insérer ce code haml dans un fichier html:Créer une aide ou quelque chose pour haml avec rubis sur des rails

<div clas="holder"> 
<div class=top"></div> 
    <div class="content"> 
    Content into the div goes here 
    </div> 
<div class="bottom"></div> 
</div> 

Et je veulent l'utiliser dans mon document haml comme ceci:

%html 
%head 
%body 
    Maybee some content here. 
    %content_box #I want to get the code i wrote inserted here 
    Content that goes in the content_box like news or stuff 
%body 

est-il un moyen plus facile de le faire?


Je reçois cette erreur:

**unexpected $end, expecting kEND** 

avec ce code:

# Methods added to this helper will be available to all templates in the application. 
module ApplicationHelper 
def content_box(&block) 
    open :div, :class => "holder" do # haml helper 
    open :div, :class => "top" 
    open :div, :class => "content" do 
     block.call 
    open :div, :class => "bottom" 
    end 
end 
end 

Répondre

37

Vous pouvez utiliser haml_tag trop

def content_box 
    haml_tag :div, :class => "holder" do 
    haml_tag :div, :class => "top" 
    haml_tag :div, :class => "content" do 
     yield 
    haml_tag :div, :class => "bottom" 
    end 
end 

et haml

%html 
    %head 
    %body 
    Maybee some content here. 
    = content_box do 
     Content that goes in the content_box like news or stuff 
+0

s'il vous plaît lire mon commentaire sur l'autre réponse et lequel est le plus efficace en termes de vitesse de l'application? – Lisinge

+0

la différence de vitesse est vraiment nul.La méthode d'aide est génial de l'utiliser. – shingara

3

La solution typique est d'utiliser une partie.

Ou une méthode d'assistance dans votre fichier _helper.rb:

def content_box(&block) 
    open :div, :class => "holder" do # haml helper 
    open :div, :class => "top" 
    open :div, :class => "content" do 
     block.call 
    end 
    open :div, :class => "bottom" 
    end 
end 

Et haml:

%html 
    %head 
    %body 
    Maybee some content here. 
    = content_box do 
     Content that goes in the content_box like news or stuff 
+1

ok, merci. et où dois-je mettre le _helper.rb et comment puis-je le charger? désolé im nouveau aux rails. vient d'utiliser PHP – Lisinge

+0

et je veux envoyer un paramètre à la fonction pour changer la couleur de la boîte, et cela fonctionne comme changer la classe sur la div de class = "holder_ @ color_here", comment puis-je faire cela? – Lisinge

+4

La méthode 'open' a été remplacée par' haml_tag' pour plusieurs versions. Utilisez 'haml_tag' à la place. Si vous voulez que l'assistant soit disponible n'importe où dans l'application, placez-le dans app/helpers/application.rb. Si vous voulez seulement qu'il soit disponible pour les vues pour FoosController, mettez-le dans app/helpers/foos.rb. –

Questions connexes