我正在使用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
完成了这项工作。
答案 0 :(得分:1)
这里的问题是截断。结果未标记为HTML安全,因此在视图中使用时将受到默认转义的约束,除非由raw()包装。如果文本包含HTML标记或实体,则应该小心,因为截断可能会产生无效的HTML(例如不平衡或不完整的标记)。
http://apidock.com/rails/ActionView/Helpers/TextHelper/truncate