Virtuemart 2: как сделать, чтобы после добавления в корзину кнопка «Купить» меняла своё оформление
Бывает, что после добавления товара в корзину нужно изменить кнопку «Купить» на кнопку «Товар в корзине».
Меняем два файла-шаблона:
1) Шаблон вывода товара (components/com_virtuemart/views/productdetails/tmpl/default.php).
Вверху после defined(‘_JEXEC’) or die(‘Restricted access’); вставляем следующий код:
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;
}
Далее в этом же файле оборачиваем шаблон вывода кнопки «Купить»:
<divin_cart";}?>">
<?php echo $this->loadTemplate('addtocart');?>
</div>
Потом через css и js работаем с классом in_cart
2) Теперь меняем шаблон вывода товара в категории (components/com_virtuemart/views/category/tmpl/default.php).
Здесь в месте вывода кнопки «Купить» вставляем следующий код целиком:
<div class='cat-calc'>
<form method="post" action="index.php" >
<span>
<input type="text" name="quantity[]" value="1" />
</span>
<span>
<input type="button" />
<input type="button" />
</span>
<?php
if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php');
$cartProducts = VirtueMartCart::getCart(false)->products;
// счётчик количества совпадений
$count = 0;
// проверяем каждый продукт в корзине
foreach($cartProducts as $cartProduct){
$inCart = ($cartProduct->virtuemart_product_id==$product->virtuemart_product_id);
// если было совпадение текущего продукта и продукта в корзине, присваиваем класс обёртке
if($inCart==1){
echo "<div class='cart-binder in_cart'><span class='addtocart-button'>";
echo shopFunctionsF::getAddToCartButton($product->orderable);
echo "</span></div>";
$count = 1;
}
}
// если совпадений не было, рисуем простую кнопку "Купить"
if($count == 0){
echo "<div class='cart-binder'><span class='addtocart-button'>";
echo shopFunctionsF::getAddToCartButton($product->orderable);
echo "</span></div>";
}
?>
<input type="hidden" value="product_name ?>" />
<input type="hidden" name="option" value="com_virtuemart" />
<input type="hidden" name="view" value="cart" />
<noscript>
<input type="hidden" name="virtuemart_product_id[]" value="virtuemart_product_id ?>" />
</form>
</div>
Не забываем также ввести точно такой же код в модуле вывода товаров Virtuemart, если он используется!
Ну и для того, чтобы изменения происходили прямо на странице, добавляем js-скрипт:
/* меняем стиль оформления кнопки, если товар в корзине */
$('.in_cart').each(function(){
$(this).find('.addtocart-button>input').attr('value','В корзине').addClass('in_cart-input');
});
/* когда кликаем "Купить", добавляем обёртке особый класс, чтобы изменить стиль кнопки */
$('.addtocart-button').click(function(){
$(this).parents('.cart-binder').addClass('in_cart');
$(this).attr('value','В корзине');
});
С подсказки xrender с форума virtuemart.ru