如何移除PrestaShop 1.7结账流程中的配送地址步骤?
PrestaShop 1.7 移除结账地址步骤后页面空白的解决办法
需求说明
店铺仅售卖数字产品,不需要收集客户收货/账单地址,希望彻底移除结账流程中的地址填写步骤(对应流程截图:
)。按照相关方案修改Address.php、Cart.php和OrderController.php后,前端页面出现空白。
已尝试的操作步骤
- 在后台创建一个默认地址,记录其
id_address = 2 - 通过模块挂载
actionDispatcher钩子,自动将购物车关联到该默认地址
模块文件:modules/yourmodule/yourmodule.php<?php public function hookActionDispatcher($params = []){ // 进入支付类控制器时,自动更新购物车的地址ID为预设值2 $payments_controllers = [ 'ps_wirepaymentvalidationModuleFrontController', 'ps_checkpaymentvalidationModuleFrontController', ]; if($params['controller_type'] == Dispatcher::FC_FRONT && in_array($params['controller_class'], $payments_controllers) && $params['is_module']){ $cart = new Cart($this->context->cookie->id_cart); if($cart->id_address_delivery == 0 || $cart->id_address_invoice){ $cart->id_address_delivery = 2; $cart->id_address_invoice = 2; $cart->update(); } } } - 重写
Address类,硬编码默认地址ID
文件路径:override/classes/Address.phpclass Address extends AddressCore { public static function getFirstCustomerAddressId($id_customer, $active = true){ return 2; // 直接返回预设的地址ID } } - 重写
Cart类,跳过地址有效性校验
文件路径:override/classes/Cart.phpclass Cart extends CartCore { public function checkAndUpdateAddresses(){ return true; // 强制返回地址有效 } } - 重写
OrderController,移除结账流程中的地址步骤
文件路径:override/controllers/front/OrderController.phpclass OrderController extends OrderControllerCore { protected function bootstrap(){ // 原计划复制官方1.7.2.x版本OrderController的bootstrap方法代码 // 并注释掉地址步骤的代码,但实际操作后页面空白 } }
页面空白问题排查与修复
页面空白的核心原因是:重写OrderController的bootstrap方法时,没有完整保留原方法的必要初始化逻辑,导致控制器无法正常加载。
修正后的OrderController.php代码
完整复制原方法的所有代码,仅移除地址步骤的添加逻辑即可:
class OrderController extends OrderControllerCore { protected function bootstrap() { $this->translator = $this->getTranslator(); $this->checkGuestCheckout(); $this->steps = (new CheckoutProcess()) // 移除地址步骤,直接保留配送、支付、确认步骤 ->addStep(new CheckoutDeliveryStep( $this->context, $this->translator, $this->makeDeliveryForm() )) ->addStep(new CheckoutPaymentStep( $this->context, $this->translator, $this->makePaymentForm() )) ->addStep(new CheckoutConfirmationStep( $this->context, $this->translator )) ; $this->setStep(); } }
额外注意事项
- 修改文件后,必须删除
var/cache/prod和var/cache/dev目录下的缓存文件,确保重写逻辑生效 - 确认预设的
id_address = 2在后台地址管理中真实存在,避免因无效地址触发报错 - 检查自定义模块是否正确挂载了
actionDispatcher钩子,可通过后台“模块 > 位置”验证钩子绑定状态
内容的提问来源于stack exchange,提问作者Rick G. Bishop
相关产品推荐
相关产品推荐

