如何通过在 shopping-cart.tpl 中创建变量来修改 PaymentModule.php 中 $order->id_customer 的值?

How can i modify the value of $order->id_customer in PaymentModule.php by creating a variable in shopping-cart.tpl?

我在shopping-cart.tpl中有以下代码:

    $(document).ready(function(){
        $.ajax({
            url: document.location.origin+"/univers/themes/leostyl/shopping-cart.php",
            type: 'get',
            success: function(data){
                var array = $.parseJSON(data);
               ch='<select class="form-control" id="customer-id" onchange="myFunction()">';
               for (var i=0;i<array['results'].length;i++) {
                if(array['results'][i].id_default_group== 3)
                  ch=ch+'<option id='+array['results'][i].id_customer+'> '+array['results'][i].firstname+' '+array['results'][i].lastname+'</option>';
                  }
                  ch=ch+'</select>';
                  $( ".customer" ).append(ch);                    
            },
            error: function (xhr, ajaxOptions, thrownError) {
              }
        });

    });

如何通过在 shopping-cart.tpl 中创建变量来修改 PaymentModule.php 中 $order->id_customer 的值?

$order->id_customer = (int)$this->context->cart->id_customer;

您无法通过模板中的简单赋值更改它。客户 ID 是从 validateOrder() 函数中的上下文 (Cookie / Session) 中检索的...

将订单分配给不同的客户是非常危险的,但如果您真的需要这个,我看到了 2 个解决方法:

  • 覆盖 PaymentModule::validateOrder() 函数以设置您想要的客户 ID,而不是使用上下文之一,假设您之前将其存储在其他地方:Cookie, db table
  • 使用hook (actionObjectOrderAddBefore, actionValidateOrder, ...)在验证后设置或修改数据库中的所有订单相关数据(注意子流程,例如根据您使用的挂钩可能会发送给以前的客户的电子邮件确认),并且假设您之前将良好的客户 ID 存储在某处

祝你好运