如何删除prestashop 1.7上的送货运送步骤?

问题描述 投票:2回答:3

参考:How to remove delivery shipping step on prestashop 1.6.1?

我正在寻找Prestashop v1.7.2.4的解决方案,任何想法?我试图评论一些代码行,但它创建了额外的问题,如不提交订单enter image description here

prestashop-1.7
3个回答
0
投票

我设法通过将所有订单分配到单个地址并从结帐流程中删除地址步骤来隐藏地址步骤。假设您有一个id = 2的地址,使用下面的代码,所有订单都将使用此地址创建。

  1. 从BO创建一个地址,假设它有id_address = 2
  2. 挂钩动作调度程序更新数据库中的购物车

并将您的模块挂钩到actionDispatcher

模块/ yourmodule / yourmodule.php:

<?php
public function hookActionDispatcher($params = []){
  // every time we go to a payment controller, we update current cart id_addresses to 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();
    }
  }
}
  1. 使用硬编码的id_address覆盖地址

覆盖/班/ Address.php:

class Address extends AddressCore {
  public static function getFirstCustomerAddressId($id_customer, $active = true){
    return 2; // hardcoded id_address
  }
}
  1. 覆盖购物车以获得始终有效的地址

倍率/类/ Cart.php

class Cart extends CartCore {
  public function checkAndUpdateAddresses(){
    return true; // always valid
  }
}
  1. 覆盖OrderController以从checkout override / controllers / front / OrderController.php中删除Adress步骤

class OrderController extends OrderControllerCore { protected function bootstrap(){ // copy everything from https://github.com/PrestaShop/PrestaShop/blob/1.7.2.x/controllers/front/OrderController.php#L90 // but comment those lines: // ->addStep(new CheckoutAddressesStep( // $this->context, // $translator, // $this->makeAddressForm() // )) } }

地址步骤现在隐藏在前台办公室:

如果您只执行第5步,您将被重定向到checkout?step=1,因为ps_wirepayment在验证时检查cart->id_addressmodules/ps_wirepayment/controllers/front/validation.php

if ($cart->id_customer == 0 || $cart->id_address_delivery == 0 || $cart->id_address_invoice == 0 || !$this->module->active){
  Tools::redirect('index.php?controller=order&step=1');
}

干杯,

弗洛里安


0
投票

在prestashop 1.7。*我设法禁用(消失)整个交付步骤。在我的场景中,我的客户的商业模式是货到付款。

为实现这一点,我在源代码中对其进行了评论。

在文件controllers / front / OrderController.php中注释掉checkoutDeliveryStep


0
投票

只需注释掉以下几行

->addStep(new CheckoutAddressesStep(
            $this->context,
            $translator,
            $this->makeAddressForm()
        ));

在/controllers/front/OrderController.php中

© www.soinside.com 2019 - 2024. All rights reserved.