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

Posted

技术标签:

【中文标题】如何删除 prestashop 1.7 上的送货步骤?【英文标题】:How to remove delivery shipping step on prestashop 1.7? 【发布时间】:2018-04-24 00:26:40 【问题描述】:

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

我正在寻找 Prestashop v1.7.2.4 的解决方案,有什么想法吗? 我试图评论一些代码行,但它产生了额外的问题,比如不提交订单

【问题讨论】:

【参考方案1】:

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

为了实现这一点,我在源代码中注释掉了。

在文件中

controllers/front/OrderController.php
comment out checkoutDeliveryStep

【讨论】:

【参考方案2】:

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

1.从BO创建一个地址,假设它有id_address = 2

2. 挂钩 actionDispatcher 以在数据库中更新我们的购物车

并将你的模块挂接到 actionDispatcher

modules/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();
        
      
    

3. 用硬编码的 id_address 覆盖地址

override/classes/Address.php

    class Address extends AddressCore 
      public static function getFirstCustomerAddressId($id_customer, $active = true)
        return 2; // hardcoded id_address
      
    

4. 覆盖购物车以获得始终有效的地址

override/classes/Cart.php

    class Cart extends CartCore 
      public function checkAndUpdateAddresses()
        return true; // always valid
      
    

5. 覆盖 OrderController 以从结帐中删除地址步骤

override/controllers/front/OrderController.php

    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-&gt;id_address

modules/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');
    

干杯,

弗洛里安

【讨论】:

【参考方案3】:

只需注释掉以下几行

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

在 /controllers/front/OrderController.php 中

【讨论】:

抱歉,这会破坏某些支付提供商的结帐流程。

以上是关于如何删除 prestashop 1.7 上的送货步骤?的主要内容,如果未能解决你的问题,请参考以下文章

Prestashop 1.7 上的 Prestashop1.6 主题

卸载 PrestaShop 1.7

PrestaShop 1.7 如何启用 debug 模式

PrestaShop 1.7 如何启用 debug 模式

Prestashop 1.7 中的自定义钩子

在结帐 prestashop 1.7 中添加字段