9

私はHAMLを使用してサイトの静的HTMLページを生成しており、Railsの場合と同様に、一般的なコンポーネントを複数のページに含めることができる部分に分割したいと考えていました。ただし、Railsスタック全体を使用してこれを行うのはやり過ぎのように思われるため、使用したくありません。

私はインターネットを見回しましたが、次のようなことをするよりも良いことは何も見つかりませんでした。

Haml::Engine.new(IO.read("header.haml")).render

HAML内からいわゆるパーシャルを含めるためのより良い方法はありますか?私が見逃している既存のフィルターまたはコマンド?

4

5 に答える 5

6

hamlとsassを静的なWebサイトを構築するためのツールと組み合わせるのが最善です。ここにいくつかのリンクがあります:

私はブログにjekyllを使用していますが、ブログを作成していない場合は、おそらくニーズに適していないでしょう。

于 2009-09-09T15:19:09.430 に答える
3

くそー、あなたは正しいです–組み込みの方法はありません。コマンドラインでヘルパーを使用しましたhamlが、常に出力が既にHTML形式になっているヘルパーを使用しました。

私の最善の提案は、partial()メソッドを作成してそれを要求することです。あなたはすでにこの道を歩み始めているようです。このような関数を作成する人は、元のバインディングを何らかの方法で保持することを検討することをお勧めします。Haml :: Helpers#capture_hameは、これを実現する最も簡単な方法のようです。

実行速度が問題になる場合は、 Merbと同じ方法で、解析されたテンプレートの一部をキャッシュすることもお勧めします。

誰かがコードを機能させた場合は、それをGitHubに載せて、ここにコメントしてください。

于 2009-09-07T05:35:06.797 に答える
1

ついに探していたものが見つかったので、見つけたものをあなたと共有したいと思いました。そもそもhamlに使用するのと同じ構文を使用するだけです-http ://www.semicomplete.com/blog/geekery/partials-in-haml-in-sinatra.html

/views/file.haml

%h3 Title
%div= haml :content, :layout => false

/views/content.haml

%p your content here
于 2013-12-12T01:54:30.263 に答える
0

私は基本的に同じことをしようとしていますが、すべてのソリューションは私の目的にはかさばるように見えました。これは私が書いたルビースクリプトで、貴重なことはほとんどありません-Hamlを評価し、= partial "test.haml"好きな場所に貼り付けるオプションを付けます。部分的なファイルを見つけようとするのは、些細な量のロジックです。

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]

次のように実行します:ruby hamlize.rb input.haml> output.html

于 2012-09-12T06:41:49.857 に答える
0

私も同じ問題を抱えていました。サーバーの応答を最適化するためにいくつかのhtmlスニペットを生成する必要がありました。このスニペットに(グラフを描画するための)多くの計算があり、ユーザーがリクエストを行うたびに、すべての処理が不必要に行われていました。

ビューをいくつかのhamlパーシャルに分割したら、これを再利用してhtmlファイルを生成したいと思いました。

私の最初のアプローチはHamlエンジンを試してみましたが、パーシャルが他のパーシャルとアプリケーションヘルパーの一部の機能をレンダリングすると、機能しませんでした。最終的に、htmlファイル(to_html)を作成したいモデルで関数を作成することで合格したソリューションを見つけました。これが次のとおりです。

def to_html
  ActionView::Base.send :include, ActionView::Helpers::ApplicationHelper

  File.open(File.join(Rails.root, "public", 'test.html'), "w") do |file|

  file.print ActionView::Base.new(Rails.configuration.paths["app/views"].first).render(
                :partial => 'partial_folder/partial', 
                :format => :html,
                :locals => { :model => self}
              )
  end  
end

このようにして、すでに実行されたパーシャルを使用して、htmlファイルを印刷することができました。これは私にとってはうまくいきました、多分それはあなたにも役立つかもしれません。

于 2013-05-07T13:43:22.740 に答える