shopcreator.com.ua 0 Posted May 8, 2009 Report Share Posted May 8, 2009 Не знаю, в тот ли раздел. Возможно, нужно было в "проблемы и решения" кинуть, чтобы люди могли при необходимости найти... Итак. Есть у нас 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} x <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} x <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 (если реклама - удалите, хотя сайт тестовый). Link to post Share on other sites
support 447 Posted May 8, 2009 Report Share Posted May 8, 2009 Спасибо большое. В принципе, если глючить не будет, наверное можно будет и по умолчанию в магазин добавить. Вообще бокс корзина задумывался как укороченный вариант чтоли, т.е. только краткая информация, а уже все подробности на странице корзина - shopping_cart.php Link to post Share on other sites
support 447 Posted May 8, 2009 Report Share Posted May 8, 2009 Кстати, красивый магазин http://miu.com.ua Прям загляденье. Только что-то кнопка Добавить в корзину не работает, вот по той ссылке, что Вы привели. Нажимаю добавить и ничего не происходит. Link to post Share on other sites
shopcreator.com.ua 0 Posted May 12, 2009 Author Report Share Posted May 12, 2009 Спасибо большое. В принципе, если глючить не будет, наверное можно будет и по умолчанию в магазин добавить. Вообще бокс корзина задумывался как укороченный вариант чтоли, т.е. только краткая информация, а уже все подробности на странице корзина - shopping_cart.php Я только "за". :) Кстати, красивый магазин http://miu.com.ua Прям загляденье. Спасибо! :) Только что-то кнопка Добавить в корзину не работает, вот по той ссылке, что Вы привели. Нажимаю добавить и ничего не происходит. Странно. Только что проверил в ИЕ8, ФФ и Опере - у меня добавление работает. Да и саму форму добавления {$FORM_ACTION}{$ADD_QTY}{$ADD_CART_BUTTON}{$FORM_END}[/code]я не трогал, не переопределял (только графическую кнопку заменил).Правда нашел небольшую недоработку, но ее уже исправил выше. Link to post Share on other sites
support 447 Posted May 13, 2009 Report Share Posted May 13, 2009 Хорошо, спасибо большое. Обязательно проверю код и если всё нормально работает, скорей всего, добавлю по умолчанию в магазин в следующей версии. Link to post Share on other sites
support 447 Posted June 29, 2009 Report Share Posted June 29, 2009 Добавил по умолчанию данный код в магазин. Будет в следующей версии VaM Shop 1.52. Ещё раз спасибо shopcreator.com.ua Link to post Share on other sites
madvolkov 0 Posted June 2, 2016 Report Share Posted June 2, 2016 а что может быть ? при добавлении 1 товара в аякс корзину он добавляется норм. если добавлять в количестве 2 или большее то добавляется вообще не этот товар и цена не его. Link to post Share on other sites
support 447 Posted June 2, 2016 Report Share Posted June 2, 2016 Дайте ссылку на страницу где можно попробовать этот глюк в действии. Link to post Share on other sites
madvolkov 0 Posted June 2, 2016 Report Share Posted June 2, 2016 http://canape.su/kanape.html вот закажите пару чего то http://canape.su/kanape-s-salom-15sht.html вот например несколько таких закажите. ну или любых других Link to post Share on other sites
support 447 Posted June 2, 2016 Report Share Posted June 2, 2016 Так у Вас там совсем переделано всё, вроде как. Может где-то что-то наисправляли?! Добавил две штуки http://canape.su/kanape-s-salom-15sht.html Вроде нормально. Link to post Share on other sites
madvolkov 0 Posted June 2, 2016 Report Share Posted June 2, 2016 ясно ! лан будемс разбираться ! Link to post Share on other sites
support 447 Posted June 2, 2016 Report Share Posted June 2, 2016 Удачи. Вы для начала проверьте на демке demo.vamshop.ru , есть ли там глюк. Что б хотя бы понять, есть такая проблема в версии по умолчанию, или это уже в каких-то Ваших правках дело. Link to post Share on other sites
Recommended Posts