Добавить новую переменную в объект Prestashop Cart
В корзине (я использую 5-ступенчатую корзину) я добавил radiobox "stock_action", и мне нужно отправить это значение в объект корзины, потому что на основе значения я хотел бы добавить некоторые дополнительные расходы на заказ.
В переопределении корзины я добавил $stock_action
Но значение радио stock_action не отправляется после нажатия кнопки на следующий шаг в корзине.
Затем я попытался отправить это значение с помощью AJAX, но я не уверен,как правильно отправить его и поймать его с другой стороны, чтобы назначить объект Cart. Я пробовал различные комбинации других функций в 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'),
),
);
и я придумали что-то вроде этого:
cart-summary.js
Я на правильном пути или есть более простой способ сделать это в PrestaShop? Спасибо.



Ответы - Добавить новую переменную в объект Prestashop Cart / Add new variable to Prestashop Cart object

17.07.2019 10:44:31
Вам нужно 'stock_action'
cart
, чтобы увидеть его, просто включите режим Dev в Unknown column 'stock_action' in 'field list'
установить config/defines.inc.php
значение true.
UPD:
Чтобы сделать ваш AJAX работает выполните следующие действия(в дополнение к предыдущим)
1. Переопределение / изменение контроллеров / фронт / OrderController.php метод initContent () и добавить следующий код
define('_PS_MODE_DEV_', false);
сразу после этого
if (Tools::isSubmit('ajax') && Tools::getValue('method') == 'updateStockAction') {
$this->context->cart->stock_action = (int)Tools::getValue('stock_action');
$this->context->cart->save();
}
блок
2. Перейдите в папку вашей темы js и добавьте в global.в JS кода AJAX
if (Tools::isSubmit('ajax') && Tools::getValue('method') == 'updateExtraCarrier') {
....
}
3. Перейдите в файл шаблона темы shopping-cart.tpl и добавить где-то ваш вход радио
$(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!');
}
});
});
Я проверил его и он работает! На всех следующих страницах у вас будет правильное значение <input type="radio" name="stock_action" value="1" />
<input type="radio" name="stock_action" value="0" />
, и оно будет актуально до тех пор, пока ваша корзина не будет существовать или вы не измените ее на другую

unknown column...
ошибка, но я добавил stock_action
в любом случае и до сих пор значение не передается в корзину объект у меня 0 (и не знаю, почему string
так я поставил int
), которая по умолчанию в БД object(Cart)[17] public 'stock_action' => string '0' (length=1)
. Должен ли он работать с кодом AJAX, который у меня есть или без этого кода?


