0

一部のSpreeコアテンプレートコードをDefaceに置き換えていますが、もう少しカスタム化するまではすべてうまく機能します。

Deface::Override.new(
    :virtual_path => "spree/shared/_products",
    :replace => "span.price",
    :text => "<%= link_to truncateproduct.display_price + '<span class=\"purchase-suggestion\">BUY NOW</span>', :length => 20), product, :class => 'price selling', :itemprop => \"price\", :title => product.name + ': ' + product.display_price %>",
    :name => "product_price"
)

上記では、価格のテキストをリンクにすることを目指しています。また、個々のスタイリングの目的で、スパンでラップされた「今すぐ購入」のテキストも含めます。

これにより、次のようにレンダリングされます。 $15.99<span class="purchase-suggestion">BUY NOW</span>

文字列を書き込む代わりに、DefaceにHTMLを評価させるにはどうすればよいですか?

2つの異なるDefaceファイルを作成することにより、これを2つのステップで実行しようとしました。1つはリンクのスパンを交換するファイルで、もう1つはスパンを:insert_bottomに追加するファイルです。Defaceを使用して同じ要素を2回変更することはできないようですが、これは正しいですか?


解決策 チャネルでの回答と会話に感謝します。これが解決策です:

Deface::Override.new(
    :virtual_path => "spree/shared/_products",
    :replace => "span.price",
    :text => "<%=
                  link_to ('<span>' + product.display_price + '</span> <span class=\"purchase-suggestion\">BUY NOW</span>').html_safe, product,
                  :class => 'price selling',
                  :itemprop => 'price',
                  :title => product.name + ': ' + product.display_price
              %>",
    :name => "product_price"
)

.truncate理由もなく使用され.html_safe、仕事をしました。

4

1 に答える 1

1

ここでの問題は切り捨てです。結果はHTMLセーフとしてマークされていないため、raw()でラップされていない限り、ビューで使用される場合はデフォルトのエスケープの対象になります。テキストにHTMLタグまたはエンティティが含まれている場合は、切り捨てによって無効なHTML(不均衡または不完全なタグなど)が生成される可能性があるため、注意が必要です。

http://apidock.com/rails/ActionView/Helpers/TextHelper/truncate

于 2012-10-17T00:19:07.013 に答える