Перейти к содержанию
Форум поддержки пользователей VamShop

Сделал AJAX удаление из корзины + добавил аттрибуты прод


shopcreator.com.ua

Рекомендуемые сообщения

Не знаю, в тот ли раздел. Возможно, нужно было в "проблемы и решения" кинуть, чтобы люди могли при необходимости найти...

Итак. Есть у нас AJAX добавление в корзину, но нет AJAX удаления из корзины.

Решил исправить этот непорядок. :) В общем, к делу:

1. в /templates/vamshop/source/boxes/shopping_cart.php строка 33-39

заменить


for ($i = 0, $n = sizeof($products); $i < $n; $i ++) {
$qty += $products[$i]['quantity'];
$products_in_cart[] = array ('QTY' => $products[$i]['quantity'],
'LINK' => vam_href_link(FILENAME_PRODUCT_INFO, vam_product_link($products[$i]['id'],$products[$i]['name'])),
'NAME' => $products[$i]['name']);

}
[/code] на
[code]
for ($i = 0, $n = sizeof($products); $i < $n; $i ++) {
$qty += $products[$i]['quantity'];

// Push all attributes information in an array
        $product_attributes = "";
$product_attributes_in_cart = "";

if (isset ($products[$i]['attributes'])) {
while (list ($option, $value) = each($products[$i]['attributes'])) {
//$hidden_options .= vam_draw_hidden_field('id['.$products[$i]['id'].']['.$option.']', $value);
$attributes = vam_db_query("select popt.products_options_name, popt.products_options_type, poval.products_options_values_name, pa.options_values_price, pa.price_prefix,pa.attributes_stock,pa.products_attributes_id,pa.attributes_model , pa.options_values_id
                                      from ".TABLE_PRODUCTS_OPTIONS." popt, ".TABLE_PRODUCTS_OPTIONS_VALUES." poval, ".TABLE_PRODUCTS_ATTRIBUTES." pa
                                      where pa.products_id = '".$products[$i]['id']."'
                                      and pa.options_id = '".$option."'
                                      and pa.options_id = popt.products_options_id
                                      and pa.options_values_id = '".$value."'
                                      and pa.options_values_id = poval.products_options_values_id
                                      and popt.language_id = '".(int) $_SESSION['languages_id']."'
                                      and poval.language_id = '".(int) $_SESSION['languages_id']."'");
$attributes_values = vam_db_fetch_array($attributes);

if($attributes_values['products_options_type']=='2' || $attributes_values['products_options_type']=='3'){
$hidden_options .= vam_draw_hidden_field('id[' . $products[$i]['id'] . '][txt_' . $option . '_'.$value.']',  $products[$i]['attributes_values'][$option]);
    $attr_value = $products[$i]['attributes_values'][$option];
}else{
$hidden_options .= vam_draw_hidden_field('id[' . $products[$i]['id'] . '][' . $option . ']', $value);
    $attr_value = $attributes_values['products_options_values_name'];
}
$product_attributes[$option]['NAME']  = $attributes_values['products_options_name'];
$product_attributes[$option]['VALUE'] = $attributes_values['products_options_values_name'];
$product_attributes_in_cart .= vam_draw_hidden_field('id[' . $products[$i]['id'] . '][' . $option . ']', $attributes_values['options_values_id']);
}
}
// Push all attributes information in an array
$products_in_cart[] = array ('QTY' => $products[$i]['quantity'],
'PRICE' => "$ " . ($products[$i]['price'] * $products[$i]['quantity']),
'LINK' => vam_href_link(FILENAME_PRODUCT_INFO, vam_product_link($products[$i]['id'],$products[$i]['name'])),
'PRODUCTS_QTY' => $product_attributes_in_cart . vam_draw_hidden_field('cart_quantity[]', $products[$i]['quantity'] - 1) . vam_draw_hidden_field('products_id[]', $products[$i]['id']) . vam_draw_hidden_field('old_qty[]', $products[$i]['quantity']) . ($products[$i]['quantity'] < 2 ? vam_draw_hidden_field('cart_delete[]', $products[$i]['id']) : ''),
'ATTRIBUTES' => $product_attributes,
'NAME' => $products[$i]['name']);


}

2. /templates/vamshop/boxes/box_cart.html строка 16 после
{$products_data.QTY}&nbsp;x&nbsp;&nbsp;<a href="{$products_data.LINK}" title="{$products_data.NAME}">{$products_data.NAME|vam_truncate:$smarty.const.MAX_DISPLAY_CART:"...":true}</a>
[/code] добавить
[code]<form id="cart_quantity" action="{$products_data.LINK}/action/update_product" method="POST" onsubmit="doDelProduct(this); return false;">{$products_data.PRODUCTS_QTY}<input type="image" src="images/deletebut.png" width="19" height="19" border="0" title="" /></form>
3. /jscript/jscript_ajax_cart.js в самом конце файла добавить функцию
function doDelProduct(form) {
  showLoading();
  var reqAddCart = new JsHttpRequest();
  reqAddCart.onreadystatechange = function() {
    if (reqAddCart.readyState == 4) {
      if (reqAddCart.responseJS) {
        document.location.href = reqAddCart.responseJS.ajax_redirect;
        return;
      }
      else {
        document.getElementById('divShoppingCart').innerHTML = ''+(reqAddCart.responseText||'')+''
        if ( SHOW_ADDED ) {
          showOk();
          timerID = setTimeout( "addHandler(document, \'mousemove\', hideOk)", 500);
        }
      }
    }
  }

  var senddata = new Object();
  var fe = form.elements;
  for(var i=0 ; i<fe.length ; i++) {

    if ( fe[i].type=="hidden" ) {
      senddata[fe[i].name] = fe[i].value;
    }
  }
  var url = 'ajax_shopping_cart.php?' + ( senddata["products_id[]"] ? 'products_id[]='+senddata["products_id[]"]+'&' : "" ) + ( senddata["old_qty[]"] ? '&old_qty[]='+senddata["old_qty[]"]+'&' : "" ) + ( senddata["cart_quantity[]"] ? '&cart_quantity[]='+senddata["cart_quantity[]"]+'&' : "" ) + ( senddata["cart_delete[]"] ? '&cart_delete[]='+senddata["cart_delete[]"]+'&' : "" ) + 'action=update_product';

  reqAddCart.caching = false;
  reqAddCart.open( 'GET', url, true);
  reqAddCart.send( senddata );
  return false;
}
[/code] 4. /includes/cart_actions.php строка 72 заменить
[code]
case 'update_product' :

for ($i = 0, $n = sizeof($_POST['products_id']); $i < $n; $i++) {
if (in_array($_POST['products_id'][$i], (is_array($_POST['cart_delete']) ? $_POST['cart_delete'] : array ()))) {
$_SESSION['cart']->remove($_POST['products_id'][$i]);
} else {
if ($_POST['cart_quantity'][$i] > MAX_PRODUCTS_QTY)
$_POST['cart_quantity'][$i] = MAX_PRODUCTS_QTY;
$attributes = ($_POST['id'][$_POST['products_id'][$i]]) ? $_POST['id'][$_POST['products_id'][$i]] : '';
$_SESSION['cart']->add_cart($_POST['products_id'][$i], vam_remove_non_numeric($_POST['cart_quantity'][$i]), $attributes, false);
}
}
vam_redirect(vam_href_link($goto, vam_get_all_get_params($parameters)));
break;
// customer adds a product from the products page
на

case 'update_product' :

       foreach( $_REQUEST as $key => $value) $_POST[$key]=$value;
for ($i = 0, $n = sizeof($_POST['products_id']); $i < $n; $i++) {

if (in_array($_POST['products_id'][$i], (is_array($_POST['cart_delete']) ? $_POST['cart_delete'] : array ()))) {
$_SESSION['cart']->remove($_POST['products_id'][$i]);
} else {
if ($_POST['cart_quantity'][$i] > MAX_PRODUCTS_QTY)
$_POST['cart_quantity'][$i] = MAX_PRODUCTS_QTY;
$attributes = ($_POST['id'][$_POST['products_id'][$i]]) ? $_POST['id'][$_POST['products_id'][$i]] : '';
$_SESSION['cart']->add_cart($_POST['products_id'][$i], vam_remove_non_numeric($_POST['cart_quantity'][$i]), $attributes, false);
}
}
vam_redirect(vam_href_link($goto, vam_get_all_get_params($parameters)));
break;
// customer adds a product from the products page

[/code] НО, это еще не все. Так же в корзине нет отображения аттрибутов продукта. К примеру, есть у нас джинсы, разного размера, и разного цвета. Получается, Продукт: "джинсы", аттрибут "цвет" (к примеру), значения аттрибутов: 1. черный, 2. синий, 3. белый. Так вот, если положить в корзину одни и те же джинсы, но разного размера, да, отображаются 2 товара, но с одним названием - джинсы (а какие выбраны - неясно). Считаю это существенным недостатком. Поэтому его тоже поправил. Итак. 1. Сделать п. 1 (из AJAX удаления из корзины). Конечно, если вы его не делали. 2. /templates/vamshop/boxes/box_cart.html строка 16 после
[code]{$products_data.QTY}&nbsp;x&nbsp;&nbsp;<a href="{$products_data.LINK}" title="{$products_data.NAME}">{$products_data.NAME|vam_truncate:$smarty.const.MAX_DISPLAY_CART:"...":true}</a>
добавить

      {if $products_data.ATTRIBUTES!=''}
      <table width="100%" border="0" cellspacing="0" cellpadding="0">
        {foreach key=key_data item=item_data from=$products_data.ATTRIBUTES}
        <tr>
          <td>{$item_data.NAME}: {$item_data.VALUE}</td>
        </tr>
        {/foreach}
      </table>
      {/if}
[/code]

В живую работоспообность обоих дополнений можно посмотреть здесь: http://miu.com.ua/product_info.php/info/p1_Lee-Original-Jeans.html (если реклама - удалите, хотя сайт тестовый).

Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое.

В принципе, если глючить не будет, наверное можно будет и по умолчанию в магазин добавить.

Вообще бокс корзина задумывался как укороченный вариант чтоли, т.е. только краткая информация, а уже все подробности на странице корзина - shopping_cart.php

Ссылка на сообщение
Поделиться на другие сайты

Кстати, красивый магазин http://miu.com.ua

Прям загляденье.

Только что-то кнопка Добавить в корзину не работает, вот по той ссылке, что Вы привели.

Нажимаю добавить и ничего не происходит.

Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое.

В принципе, если глючить не будет, наверное можно будет и по умолчанию в магазин добавить.

Вообще бокс корзина задумывался как укороченный вариант чтоли, т.е. только краткая информация, а уже все подробности на странице корзина - shopping_cart.php

Я только "за". :)

Кстати, красивый магазин http://miu.com.ua

Прям загляденье.

Спасибо! :)

Только что-то кнопка Добавить в корзину не работает, вот по той ссылке, что Вы привели.

Нажимаю добавить и ничего не происходит.

Странно. Только что проверил в ИЕ8, ФФ и Опере - у меня добавление работает. Да и саму форму добавления

{$FORM_ACTION}
{$ADD_QTY}
{$ADD_CART_BUTTON}
{$FORM_END}[/code]

я не трогал, не переопределял (только графическую кнопку заменил).

Правда нашел небольшую недоработку, но ее уже исправил выше.

Ссылка на сообщение
Поделиться на другие сайты

Хорошо, спасибо большое.

Обязательно проверю код и если всё нормально работает, скорей всего, добавлю по умолчанию в магазин в следующей версии.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 month later...

Добавил по умолчанию данный код в магазин.

Будет в следующей версии VaM Shop 1.52.

Ещё раз спасибо shopcreator.com.ua

Ссылка на сообщение
Поделиться на другие сайты
  • 6 years later...

а что может быть ? при добавлении 1 товара в аякс корзину он добавляется норм. если добавлять в количестве 2 или большее то добавляется вообще не этот товар и цена не его.

Ссылка на сообщение
Поделиться на другие сайты

http://canape.su/kanape.html

 

вот закажите пару чего то 

http://canape.su/kanape-s-salom-15sht.html

 

вот например несколько таких закажите. ну или любых других

Ссылка на сообщение
Поделиться на другие сайты

Так у Вас там совсем переделано всё, вроде как.

Может где-то что-то наисправляли?!

Добавил две штуки http://canape.su/kanape-s-salom-15sht.html

Вроде нормально.

Ссылка на сообщение
Поделиться на другие сайты

Удачи.

Вы для начала проверьте на демке demo.vamshop.ru , есть ли там глюк.

Что б хотя бы понять, есть такая проблема в версии по умолчанию, или это уже в каких-то Ваших правках дело.

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...