Переопределить просмотры Spree Admin с Deface

Я пытаюсь добавить несколько строк в админ 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>

любая помощь по этому вопросу будет принята с благодарностью, большое спасибо!

1 ответ

Решение

Вы пропускаете шаг. Очень абстрактно вы должны указать веселье где и что вам нужно вставить.

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_detailsjust after the dom element identified byheader # 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'
)

PS

После прочтения этого раздела документа, о котором я не знал, что существует DSL для Deface, я думаю, вам нужно обновить 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 %>
Другие вопросы по тегам