gpt4 book ai didi

javascript - 将新变量添加到 Prestashop Cart 对象

转载 作者:行者123 更新时间:2023-12-02 23:18:29 29 4
gpt4 key购买 nike

在购物车(我使用 5 步购物车)中,我添加了单选框“stock_action”,并且我需要将此值发送到购物车对象,因为我想根据该值添加一些额外的订购费用。

在购物车覆盖中,我添加了 $stock_action 变量:

public $stock_action;

/**
* @see ObjectModel::$definition
*/
public static $definition = array(
'table' => 'cart',
'primary' => 'id_cart',
'fields' => array(
'id_shop_group' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_shop' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_address_delivery' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_address_invoice' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_carrier' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_currency' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
'id_customer' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_guest' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'stock_action' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_lang' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
'recyclable' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
'gift' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
'gift_message' => array('type' => self::TYPE_STRING, 'validate' => 'isMessage'),
'mobile_theme' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
'delivery_option' => array('type' => self::TYPE_STRING),
'secure_key' => array('type' => self::TYPE_STRING, 'size' => 32),
'allow_seperated_package' =>array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
),
);

但是在单击购物车中的下一步按钮后,stock_action 单选按钮的值并未发送。

然后我尝试使用 AJAX 发送该值,但我不确定如何正确发送它并在另一侧捕获它以分配给 Cart 对象。我在 cart-summary.js 中尝试了其他函数的各种组合,我想出了这样的结果:

function setStockAction() {
var val = $('input[name=stock_action]:checked').val();
$.ajax({
type: 'POST',
headers: {'cache-control': 'no-cache'},
url: baseUri + '?rand=' + new Date().getTime(),
async: true,
cache: false,
dataType: 'json',
data: 'controller=cart'
+ '&ajax=true'
+ '&stock_action=' + val
+ '&token=' + static_token
+ '&allow_refresh=1',
success: function(jsonData) {
alert('ok!');
}
});
}

我是否走在正确的道路上,或者在 Prestashop 中有更简单的方法吗?谢谢。

最佳答案

您需要将'stock_action'字段添加到数据库中的cart表中。然后这个属性将在您的购物车类实例以及其他属性中可用。如果不这样做,您将在所有与购物车相关的事件中收到错误'field list'中的未知列'stock_action',只需打开开发模式即可查看它在 config/defines.inc.php 中将 define('_PS_MODE_DEV_', false); 设置为 true。

UPD:要使您的 AJAX 正常工作,请执行以下步骤(除了前面的步骤之外)1.覆盖/修改controllers/front/OrderController.php方法initContent()并添加下一个代码
if (工具::isSubmit('ajax') && 工具::getValue('方法') == 'updateStockAction') {
$this->context->cart->stock_action = (int)Tools::getValue('stock_action');
$this->上下文->购物车->save();
}

紧接着
if (Tools::isSubmit('ajax') && Tools::getValue('method') == 'updateExtraCarrier') {
....
}
block
2. 转到主题 js 文件夹并将 AJAX 代码添加到 global.js

$(document).on('change', 'input[name="stock_action"]', function() {
var val = $('input[name=stock_action]:checked').val();
$.ajax({
type: 'POST',
headers: {'cache-control': 'no-cache'},
url: baseUri + '?rand=' + new Date().getTime(),
async: true,
cache: false,
dataType: 'json',
data: 'controller=order'
+ '&ajax=true'
+ '&stock_action=' + val
+ '&method=updateStockAction'
+ '&token=' + static_token
+ '&allow_refresh=1',
success: function(jsonData) {
alert('ok!');
}
});
});

3.转到您的主题模板文件 shopping-cart.tpl 并在其中添加您的 radio 输入

<input type="radio" name="stock_action" value="1" />
<input type="radio" name="stock_action" value="0" />

我检查了一下,它有效!在接下来的所有页面上,您将获得 stock_action 的正确值,并且它将一直相关,直到您的购物车存在或您将其更改为不同的

关于javascript - 将新变量添加到 Prestashop Cart 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57053774/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com