9
votes

Rendu haml partiels de l'intérieur de Haml en dehors des rails

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


0 commentaires

5 Réponses :


3
votes

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 haml , mais toujours ceux dont la sortie était déjà formatée HTML.

Ma meilleure suggestion consiste à écrire une méthode partielle () 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.

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

Si quelqu'un reçoit du code de travail, veuillez le mettre sur Github et faire un commentaire ici.


0 commentaires

6
votes

Il est préférable de combiner Haml & Sass avec un outil de construction de sites Web statiques. Voici quelques liens:


1 commentaires

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



0
votes

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]


0 commentaires

0
votes

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.

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: xxx

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.


0 commentaires

1
votes

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> xxx p>/views/content.hamlled/poFetent.

%p your content here
p>


1 commentaires

Je viens de remarquer que si vous voulez transmettre vos habitants, vous devez ajouter ": locaux => locaux" à la déclaration "HAML: Content"