[Решено] Если товар уже есть вкорзине изменить кнопку "Добавить в корзину"

  • 25 Ответов
  • 6973 Просмотров

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

*

x-render

  • ***
  • 25
  • + 2 -
Здравствуйте, уважаемые знатоки VirtueMart. Ломаю себе голову как сделать такой вариант: если товар уже есть в корзине, то в карточке товара изменить внешний вид кнопки "Добавить в корзину" или вообще не выводить кнопку эту кнопку. Подскажите пожалуйста как сделать такую проверку на странице товара. Заранее огромное спасибо.
VirtueMart 2.0.20b

Решение:
Как оказалось все очень просто.

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;
}
Если класс 'VirtueMartCart' не определен, то подключаем хелпер 'cart.php'. Потом получаем массив продуктов которые есть в корзине. Проверяем совпадение ID нашего продукта с ID продуктов из корзины, если есть совпадение останавливаем цикл.
2. Мне для оформления кнопки достаточно было поменять ее стиль, т.к. надпись кнопки на картинке фона, а не в input'е. Поэтому в файле /components/com_virtuemart/views/productdetails/tmpl/default.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 то пишем этому диву класс, вот что получилось:
Код
<div class="<? if($inCart){echo "in_cart";} ?>">
<?php echo $this->loadTemplate('addtocart');?>
</div>
3. Осталось только оформить в CSS кнопку внутри div'а .in_cart.
Вот и все решение этой загагулины.
Будут вопросы спрашивайте, постараюсь ответить.

Большое спасибо Fedor Vlasenko за упрощение данного решения.
« Последнее редактирование: 22.05.2013, 13:46:48 от x-render »

*

Fedor Vlasenko

  • ********
  • 3799
  • + 698 -
  • Все начинается с Value
Цитировать
Будут вопросы спрашивайте, постараюсь ответить.
Сразу вопрос. Зачем эти все лишние движения. Насколько я понимаю данные корзины и соответственно id товара в корзине можно вытащить из сессии прямо в карточке товара. Или я ошибаюсь?

*

x-render

  • ***
  • 25
  • + 2 -
Можно вытащить напрямую из сессии Joomla, только в каждой сессии тысяча переменных. Зачем нам обрабатывать всю сессию если в классе "VirtueMartCart" формируется массив переменных только для корзины? К тому же проверка класса "VirtueMartCart" это чисто формальность, т.к. практически всегда он уже будет определен. Да и если брать напрямую из сессии, то все равно надо использовать обработчик сессий Joomla. Если у Вас есть решение проще(хотя куда еще проще) поделитесь возможно оно будет правильнее.

*

Fedor Vlasenko

  • ********
  • 3799
  • + 698 -
  • Все начинается с Value
У меня нет VirtueMart. Все про ... *DRINK*
Я к тому, что править /components/com_virtuemart/helpers/cart.php не совсем хорошо. Так как затрется при обновлении

*

x-render

  • ***
  • 25
  • + 2 -
Цитировать
Я к тому, что править /components/com_virtuemart/helpers/cart.php не совсем хорошо. Так как затрется при обновлении
С этим согласен. Будет время попробую обойти это.  ^-^

*

Fedor Vlasenko

  • ********
  • 3799
  • + 698 -
  • Все начинается с Value
файл /components/com_virtuemart/views/productdetails/tmpl/default.php
Код: php-brief
<?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;
}
// А далее проверяем значение $inCart
if($inCart){
echo 'товар в корзине';
} else {
//товара нет в корзине
}
?>
Без хаков ^-^

*

x-render

  • ***
  • 25
  • + 2 -
 ^-^ Спасибо. Как появится возможность проверю и отпишусь.

*

x-render

  • ***
  • 25
  • + 2 -
Огромное спасибо, работает. В теме решение поправил. С меня +1.

*

xlite

  • ***
  • 67
  • + 5 -
 А данный метод что то не получается прикрутить к категории .. мне там это более важно
Разобрался для категории рецепт такой
после
Код
defined ('_JEXEC') or die('Restricted access');
добавляем
Код
if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php');

когда начинается цикл продуктов после

Код
// Start the Output
foreach ($this->products as $product) {

вносим
Код
$cartProducts = VirtueMartCart::getCart(false)->products;
foreach($cartProducts as $cartProduct){
$inCart = ($cartProduct->virtuemart_product_id==$product->virtuemart_product_id);
if ($inCart) break;
}

в моем случае я просто добавляю стиль в контейнер с продуктом

<div class="product-cont  <?php if($inCart){ ?> in_cart <?php } ?>">
« Последнее редактирование: 16.07.2013, 16:33:03 от xlite »

*

Ilyailti

  • ***
  • 35
  • + 0 -
файл /components/com_virtuemart/views/productdetails/tmpl/default.php
Код: php-brief
<?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;
}
// А далее проверяем значение $inCart
if($inCart){
echo 'товар в корзине';
} else {
//товара нет в корзине
}
?>
Без хаков ^-^


Всем, привет.
Подскажите, как правильно вставить этот код в файл /components/com_virtuemart/views/productdetails/tmpl/default.php
в какое место и что еще нужно изменить, поробывал добавлять в разные места, просто исчезает вся страница.
очень необходимо чтобы после нажатия на кнопку "купить" в карточке товара, надпись менялась на "в корзине"
Чтобы надпись менялась сразу без обновления страницы.
Люди добрые помогите.
Спасибо.
« Последнее редактирование: 27.08.2013, 18:54:47 от Ilyailti »

*

Максим Пишняк

  • ******
  • 847
  • + 35 -
  • Подразделение Virtuemart Украина
Чтобы надпись менялась сразу без обновления страницы.
Скриншот со стрелкой где нужна меняющаяся надпись, пожайлуста.
Virtuemart 2 работает практически без ошибок. Вы можете поддержать Сообщество, проголосовав за Virtuemart. Присоединяйтесь к нам на Facebook, Google Plus, Linkedin. Подпишитесь на Еженедельник о Virtuemart на Twitter

*

Ilyailti

  • ***
  • 35
  • + 0 -
вот скрин
помогите пожалуйста


нужно чтобы при нажатии "купить" товар соответственно падал в корзину и появлялась надпись в "корзине" место надписи "купить" 
« Последнее редактирование: 15.09.2013, 20:28:25 от Ilyailti »

*

Максим Пишняк

  • ******
  • 847
  • + 35 -
  • Подразделение Virtuemart Украина
Тогда покажите ваши правки для PHP, определение вашего стиля для CSS. Где конкретно в этих инструкциях у вас неясности?
2. Мне для оформления кнопки достаточно было поменять ее стиль, т.к. надпись кнопки на картинке фона, а не в input'е. Поэтому в файле /components/com_virtuemart/views/productdetails/tmpl/default.php вот это:
Код
<?php    
echo $this->loadTemplate('addtocart');
//}  // Add To Cart Button END
?>
я завернул в <div> и в классе сделал проверку если было совпадение ID то пишем этому диву класс, вот что получилось:
Код
<div class="<? if($inCart){echo "in_cart";} ?>">
<?php echo $this->loadTemplate('addtocart');?>
</div>
3. Осталось только оформить в CSS кнопку внутри div'а .in_cart.
Разобрался для категории рецепт такой...

в моем случае я просто добавляю стиль в контейнер с продуктом
<div class="product-cont  <?php if($inCart){ ?> in_cart <?php } ?>">
Virtuemart 2 работает практически без ошибок. Вы можете поддержать Сообщество, проголосовав за Virtuemart. Присоединяйтесь к нам на Facebook, Google Plus, Linkedin. Подпишитесь на Еженедельник о Virtuemart на Twitter

*

Ilyailti

  • ***
  • 35
  • + 0 -
/productdetails/default.php

Спойлер
[свернуть]

что нужно заменить чтобы корректно все работало, спасибо.
« Последнее редактирование: 16.09.2013, 14:50:51 от fsv »

*

robert

  • ********
  • 4002
  • + 371 -
Ilyailti, уберите вашу простыню под спойлер. Так ее никто читать не будет.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Ilyailti

  • ***
  • 35
  • + 0 -
пожалуйста, помогите)!

*

quhget

Ребят, подскажите пожалуйста, как сделать, чтобы иконка Добавить в Корзину исчезала, когда товара нет в наличии? Либо вместо неё появлялась Предзаказ ?

*

kok

  • **
  • 20
  • + 0 -
Привет!

Я так понял, что Решение работает только при принудительном обновлении страницы с карточкой товара?
Joomla 2.5
VM2.0.24

*

Максим Пишняк

  • ******
  • 847
  • + 35 -
  • Подразделение Virtuemart Украина
Ребят, подскажите пожалуйста, как сделать, чтобы иконка Добавить в Корзину исчезала, когда товара нет в наличии? Либо вместо неё появлялась Предзаказ ?
Ваша версия VM? Ссылка?
Virtuemart 2 работает практически без ошибок. Вы можете поддержать Сообщество, проголосовав за Virtuemart. Присоединяйтесь к нам на Facebook, Google Plus, Linkedin. Подпишитесь на Еженедельник о Virtuemart на Twitter

*

Ilyailti

  • ***
  • 35
  • + 0 -
Друзья, помогите пожалуйста по моему вопросу! ! ! ! ! :'( *DRINK*

*

Максим Пишняк

  • ******
  • 847
  • + 35 -
  • Подразделение Virtuemart Украина
Virtuemart 2 работает практически без ошибок. Вы можете поддержать Сообщество, проголосовав за Virtuemart. Присоединяйтесь к нам на Facebook, Google Plus, Linkedin. Подпишитесь на Еженедельник о Virtuemart на Twitter


*

Максим Пишняк

  • ******
  • 847
  • + 35 -
  • Подразделение Virtuemart Украина
Это не ссылка. Рекомендую обновить версию.
Virtuemart 2 работает практически без ошибок. Вы можете поддержать Сообщество, проголосовав за Virtuemart. Присоединяйтесь к нам на Facebook, Google Plus, Linkedin. Подпишитесь на Еженедельник о Virtuemart на Twitter

*

vantal

  • ***
  • 44
  • + -1 -
Стоит компонент K2 Store. Корзинаи алгоритм добавления в корзину такой же. Нужен сделать такой же функционал, чтобы добавить товар можно было только один раз. Кто нибудь может помочь? Готов заплатить.

*

Garyk01

  • **
  • 22
  • + 1 -
Нужна помощь - как этот же функционал добавить в родной Модуль VirtueMart Товары [mod_virtuemart_product]?
Пробовал вставлять код в default.php модуля - не срабатывает

*

Eholov

  • ***
  • 153
  • + 13 -
А для VirtueMart 3 есть подобное решение? Этот код не работает. В virtuemart3 нет файла cart.php