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

x-render

  • Осваиваюсь на форуме
  • 25
  • 2 / 0
Здравствуйте, уважаемые знатоки 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, 11:46:48 от x-render »
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Цитировать
Будут вопросы спрашивайте, постараюсь ответить.
Сразу вопрос. Зачем эти все лишние движения. Насколько я понимаю данные корзины и соответственно id товара в корзине можно вытащить из сессии прямо в карточке товара. Или я ошибаюсь?
*

x-render

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

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
У меня нет VirtueMart. Все про ... *DRINK*
Я к тому, что править /components/com_virtuemart/helpers/cart.php не совсем хорошо. Так как затрется при обновлении
*

x-render

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

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
файл /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 / 0
 ^-^ Спасибо. Как появится возможность проверю и отпишусь.
*

x-render

  • Осваиваюсь на форуме
  • 25
  • 2 / 0
Огромное спасибо, работает. В теме решение поправил. С меня +1.
*

xlite

  • Захожу иногда
  • 65
  • 5 / 0
 А данный метод что то не получается прикрутить к категории .. мне там это более важно
Разобрался для категории рецепт такой
после
Код
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, 14:33:03 от xlite »
*

Ilyailti

  • Осваиваюсь на форуме
  • 35
  • 0 / 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, 16:54:47 от Ilyailti »
*

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

  • Давно я тут
  • 837
  • 35 / 0
Чтобы надпись менялась сразу без обновления страницы.
Скриншот со стрелкой где нужна меняющаяся надпись, пожайлуста.
*

Ilyailti

  • Осваиваюсь на форуме
  • 35
  • 0 / 0
вот скрин
помогите пожалуйста


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

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

  • Давно я тут
  • 837
  • 35 / 0
Тогда покажите ваши правки для 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 } ?>">
*

Ilyailti

  • Осваиваюсь на форуме
  • 35
  • 0 / 0
/productdetails/default.php

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

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

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Ilyailti, уберите вашу простыню под спойлер. Так ее никто читать не будет.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Ilyailti

  • Осваиваюсь на форуме
  • 35
  • 0 / 0
пожалуйста, помогите)!
*

quhget

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

kok

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Привет!

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

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

  • Давно я тут
  • 837
  • 35 / 0
Ребят, подскажите пожалуйста, как сделать, чтобы иконка Добавить в Корзину исчезала, когда товара нет в наличии? Либо вместо неё появлялась Предзаказ ?
Ваша версия VM? Ссылка?
*

Ilyailti

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

Ilyailti

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

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

  • Давно я тут
  • 837
  • 35 / 0
Это не ссылка. Рекомендую обновить версию.
*

vantal

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

Garyk01

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

Eholov

  • Захожу иногда
  • 170
  • 14 / 0
А для VirtueMart 3 есть подобное решение? Этот код не работает. В virtuemart3 нет файла cart.php
*

SolopoV

  • Давно я тут
  • 573
  • 16 / 0
  • зеленею...
// А далее проверяем значение $inCart
if($inCart){
echo 'товар в корзине';
} else {
//товара нет в корзине
}
В 3 VirtueMart получить данные в карточке товара можно так:

Код
$session = JFactory::getSession();
$cartSession = $session->get('vmcart', 0, 'vm');
$cartProducts = json_decode($cartSession);
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как добавить полную ссылку в canonical?

Автор art22

Ответов: 9
Просмотров: 1583
Последний ответ 02.08.2021, 08:48:23
от sivers
Как в RSS ленту VirtueMart 3 добавить дополнительные изображения товара?

Автор Slava77

Ответов: 2
Просмотров: 1506
Последний ответ 06.06.2021, 01:12:01
от Slava77
Добавить ссылку на товар вместо 'Выбрать Вариант' на странице категории

Автор Akeksandr

Ответов: 0
Просмотров: 1283
Последний ответ 21.02.2021, 19:18:44
от Akeksandr
[Решено] Список товаров на главной VirtueMart

Автор vitoxa_ya

Ответов: 6
Просмотров: 8995
Последний ответ 21.10.2020, 23:27:08
от alfa212
Отключение всплывающего окна и перехода в корзину при добавлении товара

Автор calashnikov

Ответов: 15
Просмотров: 12482
Последний ответ 03.02.2020, 16:07:06
от zrkyuseo