[Помощь] VM-2 Редактирование кнопки "Добавить в корзину"

maxi2013

Мой дом здесь!
Регистрация
9 Янв 2013
Сообщения
511
Реакции
217
Подскажите пожалуйста, как сделать так чтобы при покупке товара после нажатия на кнопку "Добавить в корзину", текст на кнопке изменялся на "Уже в корзине".
Всем спасибо за помощь.
 
1. В файле components\com_virtuemart\views\productdetails\tmpl\default_addtocart.php добавляем:
PHP:
$cart = VirtueMartCart::getCart()

2. Тогда в $cart->products будет массив с товарами, которые добавлены в корзину.
3. Переберем массив, если данный товар ($this->product->id) есть в корзине, тогда в строке №120 код:
PHP:
<?php echo shopFunctionsF::getAddToCartButton ($this->product->orderable); ?>
меняем на тот текст, что нам нужен.
 
1. В файле components\com_virtuemart\views\productdetails\tmpl\default_addtocart.php добавляем:
PHP:
$cart = VirtueMartCart::getCart()

2. Тогда в $cart->products будет массив с товарами, которые добавлены в корзину.
3. Переберем массив, если данный товар ($this->product->id) есть в корзине, тогда в строке №120 код:
PHP:
<?php echo shopFunctionsF::getAddToCartButton ($this->product->orderable); ?>
меняем на тот текст, что нам нужен.
Если не трудно - можешь весь код выложить?
А то стало интересно, но не совсем понял суть решения...
 
1. В файле components\com_virtuemart\views\productdetails\tmpl\default_addtocart.php добавляем:
PHP:
$cart = VirtueMartCart::getCart()

2. Тогда в $cart->products будет массив с товарами, которые добавлены в корзину.
3. Переберем массив, если данный товар ($this->product->id) есть в корзине, тогда в строке №120 код:
PHP:
<?php echo shopFunctionsF::getAddToCartButton ($this->product->orderable); ?>
меняем на тот текст, что нам нужен.
И ведь все равно нужно будет обновлять страницу?
Идея тоже понравилась, хорошо бы к этому еще сделать обновление кнопки только что добавленного товара через аякс :) ;) .
 
Тут даже дело вот в чём, если быть точным. Когда добавил товар в корзину, кнопка "Добавить в корзину" меняется на "Уже в корзине".
И эта кнопка "Уже в корзине" должна быть все время, пока пользователь не оформил на этот товар заказ и не купил его. И вот лишь только потом кнопка "Уже в корзине" обратно меняется на "Добавить в корзину"...
Кто знает как сие чудо сотворить?)
 
1. В файле /components/com_virtuemart/views/productdetails/tmpl/default.php после
PHP:
defined('_JEXEC') or die('Restricted access');
вставляем
PHP:
if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php');
$cartProducts = VirtueMartCart::getCart(false)->products;
foreach($cartProducts as $cartProduct){
$inCart = ($cartProduct->virtuemart_product_id==$this->product->virtuemart_product_id);
if ($inCart) break;
}
Если класс 'VirtueMartCart' не определен, то подключаем хелпер 'cart.php'. Потом получаем массив продуктов которые есть в корзине. Проверяем совпадение ID нашего продукта с ID продуктов из корзины, если есть совпадение останавливаем цикл.
2. Мне для оформления кнопки достаточно было поменять ее стиль, т.к. надпись кнопки на картинке фона, а не в input'е. Поэтому в файле /components/com_virtuemart/views/productdetails/tmpl/default.php вот это:
PHP:
<?php
// Add To Cart Button
// if (!empty($this->product->prices) and !empty($this->product->images[0]) and $this->product->images[0]->file_is_downloadable==0 ) {
//if (!VmConfig::get('use_as_catalog', 0) and !empty($this->product->prices['salesPrice'])) {
         
echo $this->loadTemplate('addtocart');
//}  // Add To Cart Button END
?>
я завернул в <div> и в классе сделал проверку если было совпадение ID то пишем этому диву класс, вот что получилось:
PHP:
<div class="<? if($inCart){echo "in_cart";}?>">
<?php echo $this->loadTemplate('addtocart');?>
</div>
3. Осталось только оформить в CSS кнопку внутри div'а .in_cart.
 
Lyiziana, сделал как вы написали, но ничего не произошло. Кнопка "купить" как была так и осталась без изменений. Может есть какой-то еще другой вариант?
 
Гугл знает все :) И вот что гугл мне рассказал: Для просмотра ссылки Войди или Зарегистрируйся
Это первоисточник того что выложено выше + там еще чуток от пользователей (как например это же сделать вкатегории а не только в карточке товара)...
 
Последнее редактирование:
Гугл знает все :) И вот что гугл мне рассказал: Для просмотра ссылки Войди или Зарегистрируйся
Это первоисточник того что выложено выше + там еще чуток от пользователей (как например это же сделать вкатегории а не только в карточке товара)...
Нашел там один более менее рабочий вариант и чуть доработал. Собственно вот:
PHP:
<?php
if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php');
$cartProducts = VirtueMartCart::getCart(false)->products;
foreach($cartProducts as $cartProduct){
$inCart = ($cartProduct->virtuemart_product_id==$this->product->virtuemart_product_id);
if ($inCart) break;
}
if($inCart){

echo '<a class="showcart button big floatleft" href= <? echo $this->cart_link;?> >'.'Уже в Корзине'.'</a>';
} else {
echo $this->loadTemplate('addtocart');
}
?>
Есть два вопроса:
1. Не могу правильно расставить кавычки в этой строке
PHP:
echo '<a class="showcart button big floatleft" href= <? echo $this->cart_link;?> >'.'Уже в Корзине'.'</a>';
2. Можно ли както сделать чтобы кнопка "Уже в Корзине" отображалась сразу после нажатия на "Купить!", а не так что нажал, потом обновил страницу и лишь только после этого появляется "Уже в Корзине".
 
Есть два вопроса:
1. Не могу правильно расставить кавычки в этой строке
PHP:
echo '<a class="showcart button big floatleft" href= <? echo $this->cart_link;?> >'.'Уже в Корзине'.'</a>';
2. Можно ли както сделать чтобы кнопка "Уже в Корзине" отображалась сразу после нажатия на "Купить!", а не так что нажал, потом обновил страницу и лишь только после этого появляется "Уже в Корзине".

1. Правильный вариант :
PHP:
echo '<a class="showcart button big floatleft" href="'.$this->cart_link.'">'.'Уже в Корзине'.'</a>';
После оператора echo, внутри ещё 1 не нужен
2. Выше писал, что необходимо реализовывать через аякс, но это только если нужно вытащить количество уже добавленных товаров такого типа. А так можно просто заменять вид кнопки после нажатия ява скриптом.
 
Последнее редактирование:
Назад
Сверху