我正在尝试删除2个结帐步骤。 我试图按照网站http://guides.spreecommerce.com/checkout.html中的文档进行操作 但仍然没有任何反应。
我正在使用 狂欢1.1.2 红宝石1.9.2p318 Rails 3.2.6 Ubuntu 12.04(精确)32位
我会告诉你我做了什么,你会告诉我要解决什么。 我应该更改文件的名称或位置吗? 或者我也应该更改其他文件? 我该如何调试呢?
我创建了一个新文件“app / models / spree / order_decorator.rb”(也在“app / models / order_decorator.rb”下试过)
module SpreeCustomExtension
class Engine < Rails::Engine
def self.activate
Spree::Order.class_eval do
StateMachine::Machine.ignore_method_conflicts = true # I HAVE ADDED THOSE 2 LINES LATER, HOPING IT WOULD HELP ME,
Spree::Order.state_machines.clear # IT DIDN'T.
# customize the checkout state machine
Order.state_machines[:state] = StateMachine::Machine.new(Order, :initial => 'cart') do
after_transition :to => 'complete', :do => :complete_order
before_transition :to => 'complete', :do => :process_payment
event :next do
transition :from => 'cart', :to => 'payment'
transition :from => 'payment', :to => 'complete'
end
event :cancel do
transition :to => 'canceled', :if => :allow_cancel?
end
event :return do
transition :to => 'returned', :from => 'awaiting_return'
end
event :resume do
transition :to => 'resumed', :from => 'canceled', :if => :allow_resume?
end
event :authorize_return do
transition :to => 'awaiting_return'
end
before_transition :to => 'complete' do |order|
begin
order.process_payments!
rescue Core::GatewayError
!!Spree::Config[:allow_checkout_on_gateway_error]
end
end
before_transition :to => ['delivery'] do |order|
order.shipments.each { |s| s.destroy unless s.shipping_method.available_to_order?(order) }
end
after_transition :to => 'complete', :do => :finalize!
after_transition :to => 'delivery', :do => :create_tax_charge!
after_transition :to => 'payment', :do => :create_shipment!
after_transition :to => 'resumed', :do => :after_resume
after_transition :to => 'canceled', :do => :after_cancel
end
end
end
end
end
然后我用不同的代码尝试了相同的文件,仍然没有发生
Spree::Order.class_eval do
StateMachine::Machine.ignore_method_conflicts = true
Spree::Order.state_machines.clear
state_machine :initial => 'cart', :use_transactions => false do
event :next do
transition :from => 'cart', :to => 'payment', :if => :payment_required?
transition :from => 'cart', :to => 'complete'
transition :from => 'confirm', :to => 'complete'
# note: some payment methods will not support a confirm step
transition :from => 'payment', :to => 'confirm',
:if => Proc.new { |order| order.payment_method && order.payment_method.payment_profiles_supported? }
transition :from => 'payment', :to => 'complete'
end
event :cancel do
transition :to => 'canceled', :if => :allow_cancel?
end
event :return do
transition :to => 'returned', :from => 'awaiting_return'
end
event :resume do
transition :to => 'resumed', :from => 'canceled', :if => :allow_resume?
end
event :authorize_return do
transition :to => 'awaiting_return'
end
before_transition :to => 'complete' do |order|
begin
order.process_payments!
rescue Core::GatewayError
if Spree::Config[:allow_checkout_on_gateway_error]
true
else
false
end
end
end
before_transition :to => ['delivery'] do |order|
order.shipments.each { |s| s.destroy unless s.shipping_method.available_to_order?(order) }
end
after_transition :to => 'complete', :do => :finalize!
after_transition :to => 'delivery', :do => :create_tax_charge!
after_transition :to => 'payment', :do => :create_shipment!
after_transition :to => 'resumed', :do => :after_resume
after_transition :to => 'canceled', :do => :after_cancel
end
end
答案 0 :(得分:14)
结帐过程一直很难在Spree中自定义,并且过去曾产生过投诉。我们很高兴在Spree的1.2版本中报告,这本身就更容易了......
所以解决方案现在很容易退出 -
只需撤消所有先前的结帐操作尝试,
通过更新gem文件和bundle install来将spree升级到1.2.0
通过遵循他们的文档来处理所有代码分解(我想你会有一些)
并在app / models / spree /
Spree::Order.class_eval do
checkout_flow do
go_to_state :address
go_to_state :payment, :if => lambda { |order| order.payment_required? }
go_to_state :confirm, :if => lambda { |order| order.confirmation_required? }
go_to_state :complete
end
# If true, causes the payment step to happen during the checkout process
def payment_required?
return false
end
# If true, causes the confirmation step to happen during the checkout process
def confirmation_required?
return true
end
end
享受。
答案 1 :(得分:4)
在spree&gt; = 2.0.0中,您可以使用以下帮助方法删除任何结帐步骤。请按照以下步骤进行操作。
步骤1:在app / models / spree /中创建名为order_decorator.rb的新文件
第2步:复制并粘贴以下代码。
Spree::Order.class_eval do
#replace :delivery to any other state
remove_checkout_step :delivery
end
答案 2 :(得分:0)
默认结帐狂欢中的步骤
Spree(2.0)允许您修改结帐流程,以使用相应的帮助程序添加或删除步骤。
insert_checkout_step
remove_checkout_step
需要记住,remove_checkout_step一次只会删除一个结帐步骤:
答案 3 :(得分:0)
它适用于Spree Solidus的新分支