J'utilise HAML pour générer des pages HTML statiques pour un site et je voulais diviser des composants communs en partiels que je peux inclure dans plusieurs pages, comme dans les rails. Cependant, je ne veux pas utiliser toute la pile de rails pour faire cela comme il semble que cela semble trop tendre.
J'ai regardé autour d'Internet, mais je n'ai rien trouvé, mieux que de faire quelque chose comme: P>
Haml::Engine.new(IO.read("header.haml")).render
5 Réponses :
Darn, tu as raison - il n'y a pas de manière intégrée. J'ai utilisé des aides avec la ligne de commande Ma meilleure suggestion consiste à écrire une méthode Si la vitesse d'exécution est un problème, il peut également être une bonne idée de mettre en cache une partie du modèle analysé de la même manière que Merb em> est-ce. P>
Si quelqu'un reçoit du code de travail, veuillez le mettre sur Github et faire un commentaire ici. P > haml code>, mais toujours ceux dont la sortie était déjà formatée HTML. P>
partielle () code> et exigez-la. On dirait que vous avez déjà commencé ce chemin. Je suggérerais que quiconque écrivait une telle fonction envisage de garder la liaison originale d'une manière ou d'une autre. Haml :: Helpers # Capture_Hame semble être le moyen le plus simple de faire cela arriver. P>
Il est préférable de combiner Haml & Sass avec un outil de construction de sites Web statiques. Voici quelques liens: P>
J'utilise Jekyll pour mon blog, mais si vous ne construisez pas un blog, il n'est probablement pas approprié pour vos besoins. P>
Bien que Jekyll ait l'air bien, il est à peu près fait pour les blogs. Bien que staticmatique semble être exactement ce que je veux. Je pensais à mettre en œuvre quelque chose de similaire moi-même (c'est-à-dire que vous utilisez ERB comme un pré / post-processeur pour les modèles HAML, tels que les compilateurs COr). Merci
Toutes les solutions semblaient encombrantes à mes besoins, même si j'essaie de faire fondamentalement la même chose. Voici un script rubis que j'ai écrit que fait precious peu - évalue haml avec la possibilité de coller = partiel "test.haml" code> partout où vous le souhaitez. Il fait une quantité triviale de logique pour essayer de trouver un fichier partiel.
require 'haml'
def find filename
return filename if File.exists? filename
path = File.dirname ARGV[0]
filename = path+"/"+filename
return filename if File.exists? filename
throw "Could not find file."
end
def partial filename
source = File.read(find(filename))
engine = Haml::Engine.new(source)
engine.render(binding)
end
puts partial ARGV[0]
J'ai eu le même problème. Je devais générer des extraits HTML pour optimiser la réponse du serveur, une fois que ces extraits ont beaucoup de calculs (pour dessiner des graphiques) et chaque fois qu'un utilisateur fait une demande, il faisait toute la matière inutilement.
Une fois que j'ai les vues partitionnées dans plusieurs partiels haml, je voulais réutiliser cela pour générer les fichiers HTML. P>
Ma première approche essayait avec le moteur HAML, mais une fois que j'ai des partiels rendant d'autres partiels et certaines fonctions de l'aide de l'application, cela n'a pas fonctionné.
Finalité J'ai trouvé une solution passée en créant une fonction dans les modèles que je voulais créer un fichier HTML (to_html) ici est-ce: p> de cette façon, j'ai pu Pour utiliser les partiels déjà effectués, imprimer les fichiers HTML.
Cela a fonctionné pour moi, peut-être que cela peut vous aider également. P> p>
J'ai enfin trouvé ce que je cherchais, alors je pensais que je partageais ma trouvaille avec toi. Vous pouvez simplement utiliser la même syntaxe que vous utilisez pour Haml en premier lieu - http://www.semicompte.com/blog/geekery/partials-in-haml-in-sinatra.html
/views/file.haml p> %p your content here
p>
Je viens de remarquer que si vous voulez transmettre vos habitants, vous devez ajouter ": locaux => locaux" à la déclaration "HAML: Content"