Overriding Spree Admin Views with Deface
I am trying to add multiple lines to Spree admin.
The file I would like to override:
backend/app/views/spree/admin/orders/_shipment.html.erb
I want to add it here:
<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>
My override:
<!-- 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 %>
is in app/overrides/spree/admin/orders/shipment/add_tracking_info.html.erb.deface
Content:
</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 %>
I would like to do:
<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>
any help regarding this issue would be greatly appreciated, thank you so much!
source to share
You are missing a step. In a very abstract way, you need to tell where and what you need to insert.
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'
)
The following, which is copied from a project that I was working on until yesterday. What this means, it instructs to Deface
add a partial "spree / admin / shared / admin_order_custom_details just after the dom element identified by
header # order_tab_summary> dl.additional-info".
So I can see what you need to do
- change
html.erb.deface
tohtml.erb
and move it to where it looks likeapp/views/spree/admin/orders/add_order_detials_to_shipment.html.erb
- create a new file in
app/overides/
(spoiler alert, make it meaningful alert or regret later) - Find id (just by looking at it, I think it is something like
erb[silent]:contains('if shipment.tracking.present?')
- use
insert_bottom
insteadinsert_after
I have not run this, but I believe this is what you are looking for.
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'
)
PS
After reading this section of the document that I was not aware of was the DSL for Deface, I think you need to update the DSL so that
<!-- 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 %>
source to share