【问题标题】:Override Spree Admin views with Deface使用 Deface 覆盖 Spree Admin 视图
【发布时间】:2015-02-04 03:06:19
【问题描述】:

我正在尝试向 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>

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

【问题讨论】:

    标签: ruby-on-rails spree deface


    【解决方案1】:

    你少了一个步骤。您需要以一种非常抽象的方式告诉 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_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

    我没有运行这个,但我相信这就是你要找的。​​p>

    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

    在阅读了文档的那部分之后,我不知道有用于 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 %>
    

    【讨论】:

    • 谢谢紫妍,我正在做的项目使用了不同风格的污点......你的方法也适合我......看看:heridev.com.mx/ruby/…我可能会去不过和你的一个
    • 我更新了答案,因为我无法在此处添加代码。我认为您需要更改更新 .deface 文件的第一行。保持代码的一致性很好。因此,如果您一直在使用 DSL,最好修复它而不是使用其他的。
    • 感谢您的提示,我今天学到了一些新东西。那天我可能太懒了,没有阅读整个 wiki。
    • 谢谢,我会尽快测试,这种方法更适合大型项目,它们不只是放在 overrides 文件夹中,我觉得更有条理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    相关资源
    最近更新 更多