Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 16 Ответов
  • 9119 Просмотров
*

Yastrebov

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Как сделать единую кнопку обновления количества товара у все позиций в корзине?
По-умолчанию: рядом с каждой позицией, в столбце количество, отображается своя кнопка. Убрать ее оттуда - не проблема.
Проблема сделать в shop.cart.tpl.php, рядом с кнопкой оформить - кнопку "обновить все товары".

Гуглил усиленно, и на забугорных форумах - ничего нет.
*

Yastrebov

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
*

orchanin

  • Захожу иногда
  • 172
  • 3 / 0
Как сделать единую кнопку обновления количества товара у все позиций в корзине?
По-умолчанию: рядом с каждой позицией, в столбце количество, отображается своя кнопка. Убрать ее оттуда - не проблема.
Проблема сделать в shop.cart.tpl.php, рядом с кнопкой оформить - кнопку "обновить все товары".

Гуглил усиленно, и на забугорных форумах - ничего нет.

Нашел решение? Если да поделись тоже ищу!
*

Yastrebov

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Нет решения как не было - так и нет.
*

VetaJI

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Поднимаю вопрос! Неужели никто такого не делал?  Я не верю! Скорее всего просто влом поделиться.
*

avers_inc

  • Новичок
  • 9
  • 2 / 0
А где вообще изменить вид этой формы обновления количества товаров и удаления из корзины?
*

Perla

  • Новичок
  • 8
  • 1 / 0
Ребята, посмотрите вот это обсуждение, возможно это поможет: http://php.su/forum/topic.php?forum=28&topic=121
*

Heian

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Выложу здесь свое решение (для остальных, ну и чтобы самому не забыть) :)
Алгоритм прост - по очереди сабмиттим все кнопки для каждого товара. Через AJAX, конечно.

1. Качаем плагин JQuery Form Plugin для отправления формы через AJAX.
2. Подключаем к шаблону. Далее в шаблоне корзины делаем кнопку для обновления всех товаров сразу. У меня это так:
Код: html4strict
<input class="submitButton fleft" type="button" value="Пересчитать" id="updateAllButton" />
3. Привязываем событие при щелчке на нее.
Код: javascript
jQuery('#updateAllButton').bind('click',function(i) {
var total=0; // Итоговая сумма всех товаров
jQuery('.updateform').each(function(i) { // updateform - класс стандартной формы для обновления количества одного товара
jQuery(this).ajaxSubmit(); // обновляем один товар за другим
var tid=jQuery(this).find('input[name=product_id]').val();
var price=jQuery('#pfo'+tid).text()*1; // я модернизировал вывод цен в шаблоне так, чтобы числовое значение и идентификатор валюты выводились двумя разными значениями, вы можете сделать как вам более по душе.
var count=jQuery('#quantity'+tid).val();
var subtotal=price*count; // считаем изменение суммы
jQuery('#price'+tid).html(subtotal); // меняем стоимость за товар
total+=subtotal;
});
jQuery('.totalPriceLabel').html(total); // меняем итоговое значение
});
4. Небольшие правки в шаблоне корзины. Проставьте класс updateform или любой другой у стандартной формы обновления товара. Также обратите внимание, что вам понадобится изменить либо вывод цен (для миникорзины это меняется в shop.basket_short.php, например), либо js-код для парсинга необходимого значения.

Вот и все :)
*

gelx

  • Осваиваюсь на форуме
  • 42
  • 1 / 1
Heian,
Можно поглядеть на реализацию в файле basket_b2c.html.php ?

Я так понимаю, надо править еще basket.php?

Распишите, пожалуйста, для "чайников"
*

Heian

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
gelx,
да, вам потребуется дописать еще одно значение в массиве товара для вывода только значимой части цены (чтобы можно было скриптом достать). У меня в basket.php этот момент (строка $product_rows[$i]['price']) была на 120~ строчке. Рядом с ней добавляем строки
Код: php
$product_price = round( $product_price, 2 ); //чтобы хранить цену в числовом формате
$product_rows[$i]['price_one_raw'] = $product_price; //Цена за 1 единицу товара, только цифры
$product_rows[$i]['price_raw'] = $product_price * $cart[$i]["quantity"]; //Цена за все заказанные товары в позиции, только цифры
После этого в шаблоне (basker_b2c.html.php) можно использовать эти значения. У меня так:
Код: html4strict
<input class="quantityfield" name="quantity" id="quantity_<?=$product['product_id']?>" value="<?=$product['quantity']?>" />
<span class="priceforoneLabel" id="pfo<?=$product['product_id']?>"><?php echo $product['price_one_raw'];?></span> руб.
<span class="priceLabel" id="price<?=$product['product_id']?>"><?php echo $product['price_raw'];?></span> руб.
Я, таким образом, снивелировал своим костылем возможность менять валюту, но в моем случае нужны только рубли. Вам же, скорее всего, потребуется дописать вышеуказанные инпуты и span в тело цикла foreach шаблона корзины и сделать их невидимыми (css класс display:none).

Полный код basket_b2c.php (начиная с цикла):
Код: php
<?php foreach( $product_rows as $product ) {
      $basepath='./components/com_virtuemart/shop_image/product/';    ?>
    <tr>
        <td>
            <div class="goodThumbBlock">
                <div>
                <?php echo '<img src="'.$basepath.$product['product_thumb'].'" />';?>
                </div>
                <?php echo $product['product_name'] ?>
            </div>
        </td>
        <td>
            <input class="quantityfield" name="quantity" id="quantity_<?=$product['product_id']?>" value="<?=$product['quantity']?>" />
        </td>
        <td>
            <span class="priceforoneLabel" id="pfo<?=$product['product_id']?>"><?php echo $product['priceforone'];?></span> руб.
        </td>
        <td>
            <span class="priceLabel" id="price<?=$product['product_id']?>"><?php echo $product['price'];?></span> руб.
        </td>
        <td>
            <?php echo $product['update_form'] ?>
            <?php echo $product['delete_form'] ?>
        </td>
    </tr>
<?php } ?>

    <tr>
        <td colspan="5"> </td>
    </tr>
    <tr>
        <td class="va_top">
            <span class="shippingLabel">Доставка:</span>
        </td>
        <td colspan="4" class="va_top">
            <div class="shipmBlock">
                <input value="1" type="radio" id="shipmethod1" name="shipmethod" class="shiptohash" checked />
                <label for="shipmethod1">Доставка по городу (300 руб.)</label>
            </div>
            <div class="shipmBlock">
                <input value="2" type="radio" id="shipmethod2" class="shiptohash" name="shipmethod" />
                <label for="shipmethod2">Самовывоз (бесплатно)</label>
            </div>
        </td>
    </tr>
    <tr>
        <td colspan="5"> </td>
    </tr>

    <tr>
        <td>
            <input class="submitButton fleft" type="button" value="Пересчитать" id="updateAllButton" />
        </td>
        <td colspan="3"> </td>
        <td>
            <form action="http://<?=$_SERVER['HTTP_HOST']?>/basket" method="post" id="delete" name="delete" style="display: inline;">
            <input type="hidden" name="option" value="com_virtuemart" />
            <input type="hidden" value="shop.cart" name="page">
            <input type="hidden" name="Itemid" value="<?=$Itemid?>" />
            <input type="hidden" name="func" value="deleteAllCart" />
            <input type="submit" id="delete" name="delete" class="submitButton fright" value="Очистить" title="Удалить все товары" />
            </form>
        </td>
    </tr>
</table>
<div class="wide-separator mtb4"></div>

<div class="allsumBlock mtb10">
    Итого к оплате: <span class="totalPriceLabel"><?=$order_total_display?></span> руб.
</div>
<div class="separator"></div>
<form method="post" class="adminForm" action="http://<?=$_SERVER['HTTP_HOST']?>/checkout?page=checkout.index&ssl_redirect=0&option=com_virtuemart&Itemid=<?=$Itemid?>">
    <input class="submitButton fright" type="submit" value="Оформить заказ" />
</form>
</div>
*

gelx

  • Осваиваюсь на форуме
  • 42
  • 1 / 1
Не работает, при нажатии на "Пересчитать" ничего не происходит...

У вас, видимо, еще в <?php echo $product['update_form'] ?> и <?php echo $product['delete_form'] ?> правки были - т.к. у меня появляются 2 input, в
<input class="quantityfield" name="quantity" id="quantity_<?=$product['product_id']?>" value="<?=$product['quantity']?>" />

значение не присутствует, в стандартной update_form значение верное.

*

Heian

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
gelx, верните все назад и попробуйте просто выполнить первые три шага в моем первом сообщении. Более нигде ничего менять не надо пока.
1. Качаем плагин JQuery Form Plugin для отправления формы через AJAX.
2. Подключаем к шаблону. Далее в шаблоне корзины делаем кнопку для обновления всех товаров сразу.
3. Привязываем событие при щелчке на нее. Создаете отдельный js файл (наприме, config.js) и подключаете его в шаблон. Там пишем
Код: javascript
jQuery(document).ready(function() {
jQuery('#updateAllButton').bind('click',function(i) {
jQuery('.updateform').each(function(i) {
alert('Форма №'+i+' опрошена'); //Проверка
jQuery(this).ajaxSubmit(); // обновляем один товар за другим
});
});
});
Далее ищете строку $product[$i]['update_form'] в basket.php и ставите у каждой формы класс updateform.
Далее тест, если alert выводит сообщения для всех кнопочек с надписью "обновить" в корзине, значит, первый этап ок и можно пытаться поменять некоторые значения в полях и обновить страницу вручную. Если все обновилось, можно уже дописать изменение цены.
*

gelx

  • Осваиваюсь на форуме
  • 42
  • 1 / 1
У меня нет такой строки $product[$i] в basket.php.  :dry: Может дело в различии версий? VM 1.1.9


[вложение удалено Администратором]
*

Heian

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Возможно, я делал на VM 1.2.0b (для Joomla 2.5).
Впрочем, суть все равно не меняется. У вас там в любом случае должно быть место, где собираются параметры продукта, чтобы выводить их в шаблоне корзины. Посмотрите, как выглядят переменные, которые выводятся в шаблоне корзины, и ищите по их названию в basket.php.
*

gelx

  • Осваиваюсь на форуме
  • 42
  • 1 / 1
Возможно, я делал на VM 1.2.0b (для Joomla 2.5).
Впрочем, суть все равно не меняется. У вас там в любом случае должно быть место, где собираются параметры продукта, чтобы выводить их в шаблоне корзины. Посмотрите, как выглядят переменные, которые выводятся в шаблоне корзины, и ищите по их названию в basket.php.
Я так понимаю, это вот этот кусок:
Код
	$tpl->set_vars( Array(
'product_rows' => $product_rows,
'subtotal_display' => $subtotal_display,
'discount_before' => $discount_before,
'discount_after' => $discount_after,
'coupon_display' => $coupon_display,
'shipping' => $shipping,
'shipping_display' => $shipping_display,
'show_tax' => $show_tax,
'tax_display' => $tax_display,
'weight_total' => $weight_total,
'order_total_display' => $order_total_display,
));

Что-то как-то ничего не разобрал... я не нашел в коде basket.php блока, отвечающего за обновление кол-ва
Спойлер
[свернуть]
« Последнее редактирование: 18.12.2012, 17:34:32 от gelx »
*

niggatub

  • Захожу иногда
  • 205
  • 2 / 3
Немножко не по теме, но близко.
Каким образом можно реализовать автоматический пересчет цены при изменении количества товара в корзине. То есть избавиться от кнопки "Обновить количество в корзине"? Я уже обгулился..(
*

niggatub

  • Захожу иногда
  • 205
  • 2 / 3
Я себе сделал вот так http://itmoskvin.ru/blog/2011/10/ajax-obnovlenie-korziny-virtuemart/
Имхо намного удобней, чем обновление по нажатию кнопки.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

VirtueMart 1.1.4 и https дополнительные фото товаров

Автор Sergey1984

Ответов: 0
Просмотров: 1710
Последний ответ 23.10.2018, 19:58:44
от Sergey1984
JComments + VirtueMart (решение проблемы рейтинга товаров)

Автор Oleksii

Ответов: 9
Просмотров: 4022
Последний ответ 13.09.2018, 23:26:17
от bgg87
Перенесено: ошибка корзина VirtueMart 3.2.4

Автор fsv

Ответов: 0
Просмотров: 907
Последний ответ 01.10.2017, 23:55:12
от fsv
VMExport YML - Компонент для управления экспортом товаров из VirtueMart 1.1.x на Яндекс.Маркет

Автор jeka5555

Ответов: 5
Просмотров: 3542
Последний ответ 02.07.2017, 21:25:46
от vipiusss
VirtueMart каталог не показывает все категории товаров

Автор vasyun

Ответов: 1
Просмотров: 990
Последний ответ 14.06.2017, 20:30:51
от vasyun