1

设想:

我已经从我的应用程序中的 Spree 结帐流程中删除了交付步骤,并且我能够成功完成交易。

问题:

当我导航到“我的帐户”页面时,“发货状态”列显示nil当前订单,该订单在没有“交付”状态的情况下完成。我检查了Spree::Orders表格,它具有nil当前订单的“装运状态”值。似乎“SHIPMENT STATE”是在“Delivery”状态下确定的。根据我的理解,当我从结帐中删除“交付”状态时,它产生了这个问题。对此有什么想法吗?我附上了“我的帐户”页面的屏幕截图。

在此处输入图像描述

问题:

结帐期间是否可以在“付款”视图中组合/呈现“交付”状态视图。即使remove_checkout_step :delivery从结帐中删除 ( ) 交货状态?

4

2 回答 2

0

Spree 做了许多与交付过渡相关的事情。当我们修改状态机并删除那个结帐步骤时,这些事情仍然需要做。

作为参考,我将指向您https://gist.github.com/Senjai/bb5a4c3cf0e0b77be92f#file-checkout-rb-L89-L93

if states[:delivery]
  before_transition :to => :delivery, :do => :create_proposed_shipments
  before_transition :to => :delivery, :do => :ensure_available_shipping_rates
  before_transition :from => :delivery, :do => :apply_free_shipping_promotions
end

当您删除交付步骤时,不会发生 create_proposed_shipments 和朋友。

相反,您可以使用 class_eval Spree::Order 代替结帐控制器。

在 state_machine do 块中,您可以将突出显示的事件添加到不同的操作。在这种情况下,如果没有交付,您要么希望在之后执行这些操作,要么从付款过渡(我还没有深入研究它)

可能会涉及额外的工作,因为您可能必须自己设置运输方式/费率。因为视图在香草狂欢中做到了这一点。同样,它可以附加到状态机。

有关状态机的更多信息,请参阅https://github.com/pluginaweek/state_machine

于 2014-09-08T13:57:22.277 回答
-1

我刚刚通过以下操作完成了此操作。

如果您删除了“交付”状态,并且希望在“付款”屏幕中呈现其视图,请执行以下操作。

第 1 步:转到“付款”部分,并在要显示“交付”屏幕的位置添加以下行。

<div>
<% @order.state = "delivery" %>
<%= render @order.state, :form => form %>
</div>

第 2 步:此步骤解决了 Shipment_State 问题,当“交付”状态从结帐过程中删除时,订单提示为空白。

转到 app/controllers/checkout_controller_decorator.rb 并粘贴以下代码。

Spree::CheckoutController.class_eval do

def before_payment
before_delivery
if @order.checkout_steps.include? "delivery"
  packages = @order.shipments.map { |s| s.to_package }
  @differentiator = Spree::Stock::Differentiator.new(@order, packages)
  @differentiator.missing.each do |variant, quantity|
  @order.contents.remove(variant, quantity)
  end
end
end
end

此方法可应用于任何屏幕组合。期待狂欢社区关于他们的想法。任何建议将不胜感激。

谢谢。

于 2013-08-08T06:39:36.387 回答