如何在 prestashop 1.7 上删除交付运输步骤? [英] How to remove delivery shipping step on prestashop 1.7?

查看:74
本文介绍了如何在 prestashop 1.7 上删除交付运输步骤?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

参考:

解决方案

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

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

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

并将你的模块挂接到 actionDispatcher

modules/yourmodule/yourmodule.php:

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 覆盖地址

override/classes/Address.php:

class Address extends AddressCore {公共静态函数 getFirstCustomerAddressId($id_customer, $active = true){返回2;//硬编码的 id_address}}

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

override/classes/Cart.php

class Cart 扩展 CartCore {公共函数 checkAndUpdateAddresses(){返回真;//始终有效}}

  1. 覆盖 OrderController 以从结帐中删除地址步骤覆盖/控制器/前/OrderController.php

<代码>类 OrderController 扩展 OrderControllerCore {受保护的函数引导(){//从 https://github.com/PrestaShop/PrestaShop/blob/1.7.2.x/controllers/front/OrderController.php#L90 复制所有内容//但注释这些行://->addStep(new CheckoutAddressesStep(//$this->context,//$translator,//$this->makeAddressForm()//))}}

地址步骤现在对前台隐藏:

如果您只执行第 5 步,您将被重定向到 checkout?step=1,因为 ps_wirepayment 在验证时会检查 cart->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->;积极的){工具::重定向('index.php?controller=order&step=1');}

干杯,

弗洛里安

In reference to: How to remove delivery shipping step on prestashop 1.6.1?

I am looking for a solution for Prestashop v1.7.2.4, any ideas? I tried to comment some code lines but it created extra problem like not submitting the order

解决方案

I managed to hide Address step by assigning all orders to a single Address and removing the Address step from checkout process. Let's say you have an address with id = 2, using code below, all orders will be created with this address.

  1. Create an address from BO, let's say it has id_address = 2

  2. Hook actionDispatcher to update our cart in database

and hook your module to 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();
    }
  }
}

  1. Override Address with hardcoded id_address

override/classes/Address.php:

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

  1. Override Cart to have an always valid address

override/classes/Cart.php

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

  1. Override OrderController to remove Adress step from checkout 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() // )) } }

Address step is now hidden from the front office :

If you only do step 5, you will be redirected to checkout?step=1 because ps_wirepayment do a check on cart->id_address at validation: 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');
}

Cheers,

Florian

这篇关于如何在 prestashop 1.7 上删除交付运输步骤?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆