Уважаемые коллеги, помогите, пожалуйста, разобраться с такой проблемой.
Есть страница товара http://рыболовные-мушки.рф/Рыболовная-мушка-"Палмер-
Синель"-p3.html. Там есть селекты цвета и размера, которые не добавляются
вместе с товаром в корзину. В хтмл они описаны так:
<select name="option[3]" data-id="3" onchange="changeChoice()"class="serequired">
<option value=""> --- Выберите --- </option>
<option value="27">10 Черный / Гризли</option>
..........................
</select>
и
<select name="option[4]" data-id="4" onchange="changeChoice()"class="serequired">
<option value=""> --- Выберите --- </option>
<option value="30">10</option>
<option value="32">12</option>
<option value="31">14</option>
</select>
Кнопка "Купить":
<input type="button" value="Купить" id="button-cart" class="button"onclick="addToCart('3');">
В common.js
function addToCart(product_id, quantity) {
quantity = typeof(quantity) != 'undefined' ? quantity : 1;
console.log('click cart');
$('.vserror').remove();
p=0;
$(".serequired").each(function()
{
if($(this).val()=='')
{
b=$(this).prev().prev().html();
$(this).after('<div class="vserror">Поле '+b+'должно быть заполнено!</div>');
p=1;
}
})
if(p!=0)return false;
$.ajax({
url: 'index.php?route=checkout/cart/add',
type: 'post',
data: 'product_id=' + product_id + '&quantity=' + quantity,
dataType: 'json',
success: function(json) {
$('.success,.succesv, .warning, .attention, .information, .error').remove();
if(json.error != null && json.error.option != null)
{
for(var ii in json.error.option)
{
c="*[name='option["+ii+"]']";
b=".option[id='option-"+ii+"']";
if($(c).val()=='')$(b).after('<div class="vserror">'+json.error.option[ii]+'</div>');
}
}
else
{
if (json['redirect']) {
location = json['redirect'];
}
if (json['success']) {
$('#notification').html('<div class="succesv">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');
//$('.success').show('slow');
$('#cart-total').html(json['total']);
$("#cartcons").html(json.totaltop);
// $('html, body').animate({ scrollTop: 0 }, 'slow');
}
}
}
});
}
А где же здесь передача этих опций? Причем в чистом двиге та же самая
ерунда... Но идем в контроллер checkout/cart.php function add(). Тут
написано:
if (isset($this->request->post['option'])) {
$option = array_filter($this->request->post['option']);
} else {
$option = array();
}
т.е. опций должны "поститься" аяксом. Но в каком виде?
Ниже по коду написано:
$this->cart->add($this->request->post['product_id'], $quantity, $option, $profile_id);
А сама эта публичная функция описана так:
public function add($product_id, $qty = 1, $option, $profile_id ='') {
$key = (int) $product_id . ':';
if ($option) {
$key .= base64_encode(serialize($option)) . ':';
} else {
$key .= ':';
}
if ($profile_id) {
$key .= (int) $profile_id;
}
if ((int) $qty && ((int) $qty > 0)) {
if (!isset($this->session->data['cart'][$key])) {
$this->session->data['cart'][$key] = (int) $qty;
} else {
$this->session->data['cart'][$key] += (int) $qty;
}
}
$this->data = array();
}
Так вот вопрос: в каком виде я должен "аяксить" опции в common.js в addToCart, чтобы они верно располагались в корзине, а потом и в заказе?
Большое спасибо!