0

我正在用 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 文件分两步执行此操作,一个是我将跨度交换为链接,另一个是我将跨度添加到: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完成了这项工作。

4

1 回答 1

1

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

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

于 2012-10-17T00:19:07.013 回答