Middlemanが構築したWebサイトでは、すべてのページ(テンプレート)の内容に対して特定のRubyコードを実行する必要があります。例えばMiddlemanのページ全体でRubyメソッドを実行
、私は私のconfig.rb
ヘルパー以下だった場合:
def myexample(text)
text.gsub("dog","cat")
end
との私のtest.html.haml
:
私のプレビューと読んでいました/test.html
を生成:
Some text about a cat.
しかし、私はいくつかの異なる方法を使用していますsを変更する必要があるテキストを出力するには、特にHAMLの:markdown
フィルタを使用する必要があります。そのため、= myexample("Text")
ヘルパーのすべてをラップしないことをお勧めします。
私は、すべてのページの内容(好ましくは)を取得するRubyコードを実行したり、そのようなヘルパーに渡される引数としてHTML出力(最初のオプションが不可能な場合)を生成したいと考えています。
理想的には、このコードは開発環境とビルド環境の両方で実行されますが、それが不可能な場合はビルドで十分です。
これは可能ですか?
PS。私の具体的なケースでは、他のページを参照するために簡略表記を使用し、次にregular expression and eval()
in order to replace them with relative links from data filesを使用します。
HAMLがあなたが探している最終的なHTMLを生成することを保証できない理由はありますか?あなたがやっていることは間違いなく慣習的で、あなたはそれが必要以上に複雑になっているかもしれません。しかし、私はあなたの実際のコードがこれよりずっと複雑であることも知っています。 –
ここでの主な問題は、 '':markdown'' HAMLフィルタを100回以上使用していることです。ブロックマーカダウン(複数段落)を処理するために使用され、20%に '' ref.pageA''参照が含まれています。私は部分集合を変更することができたので、今度はあなたのコードによって他の質問から処理されますが、 '':markdown''のHAMLフィルタにはまだ評価が必要ないくつかのリンクがあります。私は、すべてのHAMLフィルタを "mymarkdown()"ヘルパーに変更したくないのは、可読性を破壊し、ヘルパーがブロック入力(複数の段落)を受け入れることができないように思われるからです。 – Rafal
ページ全体でコードを実行することができない場合、私の唯一の解決策は、 '':markdown'' HAMLフィルタの下のすべてのブロックをデータファイルに移動し、 '' mymarkdown''を付けてテンプレートに入れることです。そして、 'mymarkdown'ヘルパーとのリンクも含む、残りの1段落のテキストをすべて囲む必要があります。 – Rafal