1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

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

Тема в разделе "Virtuemart", создана пользователем maxi2013, 9 май 2013.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
  1. maxi2013

    maxi2013

    Регистр.:
    9 янв 2013
    Сообщения:
    497
    Симпатии:
    207
    Подскажите пожалуйста, как сделать так чтобы при покупке товара после нажатия на кнопку "Добавить в корзину", текст на кнопке изменялся на "Уже в корзине".
    Всем спасибо за помощь.
     
    r0m41k нравится это.
  2. faa27

    faa27 Писатель

    Регистр.:
    22 ноя 2012
    Сообщения:
    8
    Симпатии:
    2
    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); ?>
    меняем на тот текст, что нам нужен.
     
    r0m41k нравится это.
  3. Garyk01

    Garyk01 Постоялец

    Регистр.:
    6 окт 2012
    Сообщения:
    82
    Симпатии:
    30
    Если не трудно - можешь весь код выложить?
    А то стало интересно, но не совсем понял суть решения...
     
    maxi2013 нравится это.
  4. Avi

    Avi Постоялец

    Регистр.:
    10 фев 2013
    Сообщения:
    92
    Симпатии:
    28
    И ведь все равно нужно будет обновлять страницу?
    Идея тоже понравилась, хорошо бы к этому еще сделать обновление кнопки только что добавленного товара через аякс :) ;) .
     
  5. maxi2013

    maxi2013

    Регистр.:
    9 янв 2013
    Сообщения:
    497
    Симпатии:
    207
    Тут даже дело вот в чём, если быть точным. Когда добавил товар в корзину, кнопка "Добавить в корзину" меняется на "Уже в корзине".
    И эта кнопка "Уже в корзине" должна быть все время, пока пользователь не оформил на этот товар заказ и не купил его. И вот лишь только потом кнопка "Уже в корзине" обратно меняется на "Добавить в корзину"...
    Кто знает как сие чудо сотворить?)
     
    r0m41k нравится это.
  6. Lyiziana

    Lyiziana rom-kola

    Регистр.:
    17 дек 2012
    Сообщения:
    87
    Симпатии:
    14
    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.
     
    r0m41k и maxi2013 нравится это.
  7. maxi2013

    maxi2013

    Регистр.:
    9 янв 2013
    Сообщения:
    497
    Симпатии:
    207
    Lyiziana, сделал как вы написали, но ничего не произошло. Кнопка "купить" как была так и осталась без изменений. Может есть какой-то еще другой вариант?
     
  8. TyT

    TyT Ня!

    Регистр.:
    19 июн 2006
    Сообщения:
    492
    Симпатии:
    203
    Гугл знает все :) И вот что гугл мне рассказал: Перейти по ссылке
    Это первоисточник того что выложено выше + там еще чуток от пользователей (как например это же сделать вкатегории а не только в карточке товара)...
     
    Последнее редактирование: 31 окт 2013
    maxi2013 нравится это.
  9. maxi2013

    maxi2013

    Регистр.:
    9 янв 2013
    Сообщения:
    497
    Симпатии:
    207
    Нашел там один более менее рабочий вариант и чуть доработал. Собственно вот:
    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. Можно ли както сделать чтобы кнопка "Уже в Корзине" отображалась сразу после нажатия на "Купить!", а не так что нажал, потом обновил страницу и лишь только после этого появляется "Уже в Корзине".
     
    Garyk01 нравится это.
  10. Avi

    Avi Постоялец

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