【问题标题】:Prestashop 1.7.7. Error When Proceed to CheckoutPrestashop 1.7.7。结帐时出错
【发布时间】:2021-06-22 22:31:26
【问题描述】:

就像我在标题中解释的那样,这个问题与 prestashop 版本 1.7.7.0 的结帐有关。

当我将产品添加到购物车,然后按下按钮继续结帐时,我遇到了这个问题:

[21-Jun-2021 22:39:57 Europe/Madrid] PHP Fatal error:  Uncaught Error: Call to undefined method Cart::checkAllProductsAreStillAvailableInThisState() in /home/public_html/classes/checkout/CheckoutPaymentStep.php:48
Stack trace:
#0 /home/public_html/classes/checkout/CheckoutProcess.php(59): CheckoutPaymentStepCore->handleRequest(Array)
#1 /home/public_html/controllers/front/OrderController.php(278): CheckoutProcessCore->handleRequest(Array)
#2 /home/public_html/classes/controller/Controller.php(306): OrderControllerCore->initContent()
#3 /home/public_html/classes/Dispatcher.php(518): ControllerCore->run()
#4 /home/public_html/index.php(28): DispatcherCore->dispatch()
#5 {main}
  thrown in /home/public_html/classes/checkout/CheckoutPaymentStep.php on line 48

我做了一些测试:

  • 禁用所有模块,仅使用 Prestashop 的原生模块。
  • 尝试了全新安装,但我总是遇到同样的问题。
  • 不管是默认主题还是购买的主题。
  • 删除prestashop的缓存...

显然我对这个问题感到绝望......任何帮助都会非常感激。

【问题讨论】:

    标签: prestashop checkout


    【解决方案1】:

    再次向所有社区问好,

    我已经通过注释几行代码解决了这个问题。

    获取此存档并对其进行编辑。 类 > 结帐 > CheckoutPaymentStep.php

    public function handleRequest(array $requestParams = [])
        {
            $cart = $this->getCheckoutSession()->getCart();
            $allProductsInStock = $cart->isAllProductsInStock();
            //$allProductsExist = $cart->checkAllProductsAreStillAvailableInThisState(); /*-- Comment this --*/
            //$allProductsHaveMinimalQuantity = $cart->checkAllProductsHaveMinimalQuantities(); /*-- Comment this --*/
    
            //if ($allProductsInStock !== true || $allProductsExist !== true || $allProductsHaveMinimalQuantity !== true) /*-- Change this one --*/
            if ($allProductsInStock !== true) {
                $cartShowUrl = $this->context->link->getPageLink(
                    'cart',
                    null,
                    $this->context->language->id,
                    [
                        'action' => 'show',
                    ],
                    false,
                    null,
                    false
                );
                Tools::redirect($cartShowUrl);
            }
    
            if (isset($requestParams['select_payment_option'])) {
                $this->selected_payment_option = $requestParams['select_payment_option'];
            }
    
            $this->setTitle(
                $this->getTranslator()->trans(
                    'Payment',
                    [],
                    'Shop.Theme.Checkout'
                )
            );
        }
    

    目前一切顺利,我们可以处理结帐。希望如果有人遇到同样的问题,可以帮助你。

    南希。

    【讨论】:

    • 好吧 - 跳过代码执行不是一个好的解决方案恕我直言 :) 据我所知,Prestashop 1.7.7.0 Cart.php 文件中的原始文件中存在“checkAllProductsAreStillAvailableInThisState”方法,所以你要么有一个错误的版本核心 Cart.php 文件或(很可能)您在 /override/classes 文件夹中有一个覆盖的 Cart.php。尝试从原始 Prestashop 1.7.7.0 存档中替换 classes/Cart.php 并先看看会发生什么。
    • 嗨@user3256843,我完全同意你的看法,但是因为我已经尝试了一切......现实情况是,当我评论那句话并看到我继续时,你松了一口气(即使它是一个完全糟糕的补丁)。无论如何,我会尝试验证,正如您所指出的,一个文件没有被修改,包括 cart.php。感谢您的回答,我会尽快给予反馈。
    猜你喜欢
    • 2015-06-11
    • 2013-04-12
    • 1970-01-01
    • 2013-10-10
    • 2017-02-06
    • 2013-07-04
    • 2014-04-27
    • 2017-06-27
    • 2017-03-21
    相关资源
    最近更新 更多