You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除PrestaShop 1.7结账流程中的配送地址步骤?

PrestaShop 1.7 移除结账地址步骤后页面空白的解决办法

需求说明

店铺仅售卖数字产品,不需要收集客户收货/账单地址,希望彻底移除结账流程中的地址填写步骤(对应流程截图:结账流程地址步骤)。按照相关方案修改Address.php、Cart.php和OrderController.php后,前端页面出现空白。

已尝试的操作步骤

  1. 在后台创建一个默认地址,记录其id_address = 2
  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();
        }
      }
    }
    
  3. 重写Address类,硬编码默认地址ID
    文件路径:override/classes/Address.php
    class Address extends AddressCore {
      public static function getFirstCustomerAddressId($id_customer, $active = true){
        return 2; // 直接返回预设的地址ID
      }
    }
    
  4. 重写Cart类,跳过地址有效性校验
    文件路径:override/classes/Cart.php
    class Cart extends CartCore {
      public function checkAndUpdateAddresses(){
        return true; // 强制返回地址有效
      }
    }
    
  5. 重写OrderController,移除结账流程中的地址步骤
    文件路径:override/controllers/front/OrderController.php
    class 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:47:18