如何在Spree中使用Deface呈现自定义HTML

时间:2012-10-16 20:16:41

标签: ruby-on-rails erb spree

我正在使用Deface替换一些Spree核心模板代码,这一切都运行良好,直到我尝试使其更加自定义。

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而不是编写字符串?

我尝试通过制作两个不同的Deface文件分两步执行此操作,一个用于交换链接的span,另一个用于将span添加到:insert_bottom。在我看来,不可能使用Deface两次更改相同的元素 - 这是正确的吗?


解决方案 感谢您在频道中的回答和对话。这是解决方案:

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完成了这项工作。

1 个答案:

答案 0 :(得分:1)

这里的问题是截断。结果未标记为HTML安全,因此在视图中使用时将受到默认转义的约束,除非由raw()包装。如果文本包含HTML标记或实体,则应该小心,因为截断可能会产生无效的HTML(例如不平衡或不完整的标记)。

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