【问题标题】:How to override Spree checkout forms and step flows?如何覆盖 Spree 结帐表格和步骤流程?
【发布时间】:2013-08-06 11:58:26
【问题描述】:

我在我的应用程序中使用 spree 2.0.0。我只想知道如何编辑狂欢结账,或者如何在狂欢结账过程中完全删除/禁用任何“步骤”。

对此有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 spree


    【解决方案1】:

    正如Documentation 所说,您可以使用remove_checkout_step 辅助方法(这也比重新定义整个结帐过程更清晰),例如:

    Spree::Order.class_eval do
      # ...
      remove_checkout_step :delivery
      # ...
    end
    

    【讨论】:

    • 嗨马雷克。感谢您的解决方案,它很棒,而且肯定在 spree 文档中有所说明。实际上我之前尝试过,但是当我在填写地址字段后继续时,即使我已经将东西添加到购物车,它也会将我重定向到购物车页面。它可能是特定于应用程序的,但您的答案绝对是一个解决方案。
    【解决方案2】:

    我刚刚找到了解决方案。在这里。

    Step 1:Create app/models/order_decorator.rb file
    
    Step 2: Copy following code in your order_decorator.rb 
    
    Spree::Order.class_eval do
      checkout_flow do
        go_to_state :address
        #go_to_state :delivery
        go_to_state :payment, if: ->(order) {
          order.update_totals
          order.payment_required?
        }
        go_to_state :confirm, if: ->(order) { order.confirmation_required? }
        go_to_state :complete, if: ->(order) {
          (order.payment_required? && order.has_unprocessed_payments?) || !order.payment_required?
        }
        remove_transition from: :delivery, to: :confirm
      end
    end
    

    示例:如果您想删除交付状态,只需将其注释掉即可。您可以注释掉任何步骤。

    您可以在documentation找到更多信息。

    【讨论】:

      【解决方案3】:

      Spree 中的默认结帐步骤

      1. 地址
      2. 发货
      3. 付款
      4. 确认

      Spree 允许您使用相应的帮助程序修改结帐流程以添加或删除步骤。

      • insert_checkout_step
      • remove_checkout_step

      在您的情况下,您应该使用 remove_checkout_step(删除结帐步骤) remove_checkout_step 将一次只删除一个结帐步骤:

      • remove_checkout_step :address
      • remove_checkout_step :delivery

      【讨论】:

      • 很好的解释。很有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多