gpt4 book ai didi

ruby-on-rails - 使用 Deface 覆盖 Spree 管理员 View

转载 作者:行者123 更新时间:2023-12-02 01:43:08 25 4
gpt4 key购买 nike

我正在尝试向 Spree 管理添加几行。

我想覆盖的文件:

backend/app/views/spree/admin/orders/_shipment.html.erb

我想在这里添加:

<tr class="show-tracking total">
<td colspan="5" class="tracking-value">
<% if shipment.tracking.present? %>
<strong><%= Spree.t(:tracking) %>:</strong> <%= shipment.tracking %>
<% else %>
<%= Spree.t(:no_tracking_present) %>
<% end %>
</td>
</tr>

我的替代是:

<!-- insert_after '.tracking-value' -->
</br>
<strong><%= Spree.t(:is_delivered) %>: </strong><%= shipment.is_delivered %></br>
<% if shipment.date_delivered? %>
<strong><%= Spree.t(:date_delivered) %>: </strong><%= shipment.date_delivered %></br>
<% end %>

位于 app/overrides/spree/admin/orders/shipment/add_tracking_info.html.erb.deface

内容:

</br>
<strong><%= Spree.t(:is_delivered) %>: </strong><%= shipment.is_delivered %></br>
<% if shipment.date_delivered? %>
<strong><%= Spree.t(:date_delivered) %>: </strong><%= shipment.date_delivered %></br>
<% end %>

我想渲染:

<tr class="show-tracking total">
<td colspan="5" class="tracking-value">
<% if shipment.tracking.present? %>
<strong><%= Spree.t(:tracking) %>:</strong> <%= shipment.tracking %>
</br>
<strong><%= Spree.t(:is_delivered) %>: </strong><%= shipment.is_delivered %</br>
<% if shipment.date_delivered? %>
<strong><%= Spree.t(:date_delivered) %>: </strong><%= shipment.date_delivered %></br>
<% end %>
<% else %>
<%= Spree.t(:no_tracking_present) %>
<% end %>
</td>
</tr>

任何有关此问题的帮助将不胜感激,非常感谢!

最佳答案

你错过了一步。您需要以一种非常抽象的方式告诉 spree 您需要插入的位置和内容。

Deface::Override.new(
virtual_path: 'spree/admin/shared/_order_summary',
name: 'admin_order_custom_details',
insert_after: 'header#order_tab_summary > dl.additional-info',
partial: 'spree/admin/shared/admin_order_custom_details'
)

以下内容是从我到昨天为止一直在做的一个项目中复制的。它指示什么Deface添加部分 'spree/admin/shared/admin_order_custom_details just after the dom element identified by header#order_tab_summary > dl.additional-info`。

所以我认为你需要做的是

  1. 更改html.erb.deface只是html.erb并将其移动到某个位置,使其类似于 app/views/spree/admin/orders/add_order_detials_to_shipment.html.erb
  2. app/overides/ 中创建一个新文件(剧透警报,使其成为有意义的警报或稍后后悔)
  3. 找到标识符(只是看着它,我认为它类似于 erb[silent]:contains('if shipment.tracking.present?')
  4. 使用insert_bottom而不是 insert_after

我没有运行过这个,但我相信这就是您要找的。

Deface::Override.new(
virtual_path: 'app/views/spree/admin/orders/_shipment',
name: 'add_order_detials_to_shipment', # Or a fancy unique name
insert_bottom: "erb[silent]:contains('if shipment.tracking.present?')",
partial: 'app/views/spree/admin/orders/add_order_detials_to_shipment'
)

附言

在阅读了文档的那一部分之后,我并不知道有用于 Deface 的 DSL,我认为您需要更新 DSL,这样

<!-- insert_bottom "erb[silent]:contains('if shipment.tracking.present?')" -->
</br>
<strong><%= Spree.t(:is_delivered) %>: </strong><%= shipment.is_delivered %></br>
<% if shipment.date_delivered? %>
<strong><%= Spree.t(:date_delivered) %>: </strong><%= shipment.date_delivered %></br>
<% end %>

关于ruby-on-rails - 使用 Deface 覆盖 Spree 管理员 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27324465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com