Как изменить текст кнопки купить после добавления в корзину

Тема в разделе "Общие вопросы", создана пользователем yutel, 2 дек 2016.

  1. Romti

    Romti Новичок

    Сообщения:
    3
    Симпатии:
    6
    Как вариант

    1 часть ↓↓ "замена при обновлении" ↓↓

    В библиотеку
    В файле system/library/cart/cart.php

    Перед
    PHP:
    public function hasDownload() {
    добавим
    PHP:
    // by ocdev_pro
    public function hasAdded($product_id) {
        
    $query $this->db->query("SELECT * FROM " DB_PREFIX "cart
    WHERE api_id = '" 
    . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "'
    AND customer_id = '" 
    . (int)$this->customer->getId() . "'
    AND session_id = '" 
    $this->db->escape($this->session->getId()) . "'
    AND product_id = '" 
    . (int)$product_id "'");

        if(
    $query->num_rows){
            return 
    true;
        }else{
            return 
    false;
        }
    }

    Языковые переменные
    В файле catalog/language/ru-ru/ru-ru.php

    добавим
    PHP:
    $_['button_in_cart']        = 'В корзине';
    $_['button_in_the_cart']    = 'Уже в корзине'// В карточке товара

    catalog/language/uk-ua/uk-ua.php

    PHP:
    $_['button_in_cart']        = 'В кошику';
    $_['button_in_the_cart']    = 'Вже в кошику'// В картці товару

    Вывод в категории, поиск, акции, производитель
    В файлах category, search, special, manufacturer.php
    По пути catalog/controller/product/

    1.
    После
    PHP:
    $data['button_cart'] = $this->language->get('button_cart');
    добавим
    PHP:
    $data['button_in_cart'] = $this->language->get('button_in_cart');

    2. Перед
    PHP:
    $data['products'][] = array(
    добавим
    PHP:
    $has_added $this->cart->hasAdded($result['product_id']);
    И после
    PHP:
    $data['products'][] = array(
    добавим
    PHP:
    'added_to_cart'     => $has_added,

    3. В файлах category, search, special, manufacturer_info
    По пути catalog/view/theme/default/template/product/

    Находим (кнопку)
    Код:
    <button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button>
    
    заменяем на
    <?php if ($product['added_to_cart']) { ?>
    <button type="button" class="in_cart" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><i class="fa fa-check"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_in_cart; ?></span></button>
    <?php } else { ?>
    <button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button>
    <?php } ?>

    Находим (кнопку)
    Код:
    <button type="button" onclick="cart.add('{{ product.product_id }}', '{{ product.minimum }}');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_cart }}</span></button>
    заменяем на
    {% if (product['added_to_cart']) %}
    <button type="button" class="in_cart" onclick="cart.add('{{ product.product_id }}', '{{ product.minimum }}');"><i class="fa fa-check"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_in_cart }}</span></button>
    {% else %}
    <button type="button" onclick="cart.add('{{ product.product_id }}', '{{ product.minimum }}');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_cart }}</span></button>
    {% endif %}

    В карточке товара
    В файле catalog/controller/product/product.php

    1.
    После
    PHP:
    $data['button_cart'] = $this->language->get('button_cart');
    добавим
    PHP:
    $data['button_in_cart'] = $this->language->get('button_in_cart');
    $data['button_in_the_cart'] = $this->language->get('button_in_the_cart');

    2. После
    PHP:
    $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES'UTF-8');
    добавим
    PHP:
    $data['has_added'] =  $this->cart->hasAdded($product_info['product_id']);

    3. В файле catalog/view/theme/default/template/product/product.tpl / twig

    Находим (кнопку)
    Код:
    <button type="button" id="button-cart" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-primary btn-lg btn-block"><?php echo $button_cart; ?></button>
    
    заменяем на
    <?php if($has_added) { ?>
    <button type="button" id="button-cart" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-primary btn-lg btn-block in_cart"><i class="fa fa-check"></i> <span><?php echo $button_in_the_cart; ?></button>
    <?php } else { ?>
    <button type="button" id="button-cart" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-primary btn-lg btn-block"><?php echo $button_cart; ?></button>
    <?php } ?>

    Находим (кнопку)
    Код:
    <button type="button" id="button-cart" data-loading-text="{{ text_loading }}" class="btn btn-primary btn-lg btn-block">{{ button_cart }}</button>
    
    заменяем на
    {% if (has_added) %}
    <button type="button" id="button-cart" data-loading-text="{{ text_loading }}" class="btn btn-primary btn-lg btn-block in_cart"><i class="fa fa-check"></i> <span>{{ button_in_the_cart }}</button>
    {% else %}
    <button type="button" id="button-cart" data-loading-text="{{ text_loading }}" class="btn btn-primary btn-lg btn-block">{{ button_cart }}</button>
    {% endif %}

    Рекомендуемые
    В файле catalog/controller/extension/module/featured.php

    1.
    После
    PHP:
    $data['button_cart'] = $this->language->get('button_cart');
    добавим
    PHP:
    $data['button_in_cart'] = $this->language->get('button_in_cart');

    2. Перед
    PHP:
    $data['products'][] = array(
    добавим
    PHP:
    $has_added $this->cart->hasAdded($product_info['product_id']);
    И после
    PHP:
    $data['products'][] = array(
    добавим
    PHP:
    'added_to_cart'     => $has_added,
    3. В файле catalog/view/theme/default/template/extension/module/featured.tpl / twig

    Находим (кнопку)
    Код:
    <button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button>
    
    заменяем на
    Код:
    <?php if ($product['added_to_cart']) { ?>
    <button type="button" class="in_cart" onclick="cart.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-check"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_in_cart; ?></span></button>
    <?php } else { ?>
    <button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button>
    <?php } ?>
    

    Находим (кнопку)
    Код:
    <button type="button" onclick="cart.add('{{ product.product_id }}');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_cart }}</span></button>
    
    заменяем на
    Код:
    {% if (product['added_to_cart']) %}
    <button type="button" class="in_cart" onclick="cart.add('{{ product.product_id }}');"><i class="fa fa-check"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_in_cart }}</span></button>
    {% else %}
    <button type="button" onclick="cart.add('{{ product.product_id }}');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_cart }}</span></button>
    {% endif %}
    


    Рекомендуемые в карточке товара
    В файле catalog/controller/product/product.php

    Перед
    PHP:
    $data['products'][] = array(
    добавим
    PHP:
    $has_added $this->cart->hasAdded($result['product_id']);
    И после
    PHP:
    $data['products'][] = array(
    добавим
    PHP:
    'added_to_cart'     => $has_added,

    В файле catalog/view/theme/default/template/product/product.tpl / twig

    Находим (кнопку)
    Код:
    <button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span> <i class="fa fa-shopping-cart"></i></button>
    
    заменяем на
    Код:
    <?php if ($product['added_to_cart']) { ?>
    <button type="button" class="in_cart" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><i class="fa fa-check"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_in_cart; ?></span></button>
    <?php } else { ?>
    <button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button>
    <?php } ?>
    

    Находим (кнопку)
    Код:
    <button type="button" onclick="cart.add('{{ product.product_id }}', '{{ product.minimum }}');"><span class="hidden-xs hidden-sm hidden-md">{{ button_cart }}</span> <i class="fa fa-shopping-cart"></i></button>
    
    заменяем на
    Код:
    {% if (product['added_to_cart']) %}
    <button type="button" class="in_cart" onclick="cart.add('{{ product.product_id }}', '{{ product.minimum }}');"><i class="fa fa-check"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_in_cart }}</button>
    {% else %}
    <button type="button" onclick="cart.add('{{ product.product_id }}', '{{ product.minimum }}');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_cart }}</span></button>
    {% endif %}
    

    Лимит...:eek:

    ↓↓ 2 часть ↓↓
     
    Последнее редактирование: 9 июн 2022
    mracula, petyann и Ravilr нравится это.
  2. Romti

    Romti Новичок

    Сообщения:
    3
    Симпатии:
    6
    1 часть ↑↑ "замена кнопки при обновлении страницы" ↑↑


    2 часть Ajax (Замена кнопки на лету)
    В корзинe на кнопку "удалить" выводим id товара
    В файле catalog/controller/common/cart.php

    После
    PHP:
    $data['products'][] = array(
    добавим
    PHP:
    'product_id'   => $product['product_id'],
    В файле catalog/view/theme/default/template/common/cart.tpl / twig

    Находим
    Код:
    onclick="cart.remove('<?php echo $product['cart_id']; ?>');"
    заменяем на
    onclick="cart.remove('<?php echo $product['cart_id']; ?>','<?php echo $product['product_id']; ?>');"

    Находим
    Код:
    onclick="cart.remove('{{ product.cart_id }}');"
    заменяем на
    onclick="cart.remove('{{ product.cart_id }}','{{ product['product_id'] }}');"

    Добавляем Json
    В файле catalog/controller/checkout/cart.php

    1. При добавлении

    После
    PHP:
    $json['success'] = sprintf($this->language->get('text_success'), $this->url->link('product/product''product_id=' $this->request->post['product_id']), $product_info['name'], $this->url->link('checkout/cart'));
    добавим
    PHP:
    $json['button_in_cart'] = $this->language->get('button_in_cart');
    $json['button_in_the_cart'] = $this->language->get('button_in_the_cart');
    2. При удалении

    После
    PHP:
    $json['success'] = $this->language->get('text_remove');
    добавим
    PHP:
    $json['button_cart'] = $this->language->get('button_cart');

    В карточке на кнопку "купить" выводим id товара
    В файле catalog/view/theme/default/template/product/product.tpl / twig

    Находим атрибут class (2 вхождения)
    Код:
    class="btn btn-primary btn-lg btn-block in_cart">
    Код:
    class="btn btn-primary btn-lg btn-block">
    добавляем
    Код:
    <?php echo $product_id; ?>
    пример
    первое вхождение
    class="<?php echo $product_id; ?> btn btn-primary btn-lg btn-block in_cart">

    второе
    class="<?php echo $product_id; ?> btn btn-primary btn-lg btn-block">

    Находим атрибут class (2 вхождения)
    Код:
    class="btn btn-primary btn-lg btn-block in_cart">
    Код:
    class="btn btn-primary btn-lg btn-block">
    добавляем
    Код:
    {{ product_id }}
    пример
    первое вхождение
    class="{{ product_id }} btn btn-primary btn-lg btn-block in_cart"

    второе
    class="{{ product_id }} btn btn-primary btn-lg btn-block">

    В этом же файле
    Добавим замену при добавлении в корзину

    После
    Код:
    $('#cart > ul').load('index.php?route=common/cart/info ul li');
    добавим
    Код:
    setTimeout(function () {
        $('#button-cart').html('<i class="fa fa-check"></i> <span>'+json['button_in_the_cart']+'</span>').addClass('in_cart');
    }, 8);

    И в common.js
    В файле catalog/view/javascript/common.js

    1. Находим первое вхождение
    Код:
    'remove': function(key) {
    заменяем на
    Код:
    'remove': function(key, product_id) {
    2. Замена при удалении в карточке товара
    Находим третье вхождение
    Код:
    $('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');
    после добавим
    Код:
    $('.'+ product_id).html(''+json['button_cart']+'').removeClass('in_cart');

    3. Категории*
    После (2 вхождения, 1 и 3)
    Код:
    $('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');
    добавим
    первое вхождение (замена кнопки при добавлении)
    Код:
    $('[onclick *= "\''+product_id+'\'"][onclick *= "cart.add"]').html('<i class="fa fa-check"></i> <span class="hidden-xs hidden-sm hidden-md">'+json['button_in_cart']+'</span>').addClass('in_cart');
    третье вхождение (замена кнопки при удалении)
    Код:
    $('[onclick *= "\''+product_id+'\'"][onclick *= "cart.add"]').html('<i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">'+json['button_cart']+' </span>').removeClass('in_cart');

    пример

    // Need to set timeout otherwise it wont update the total
    setTimeout(function () {
    $('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');
    $('[onclick *= "\''+product_id+'\'"][onclick *= "cart.add"]').html('<i class="fa fa-check"></i> <span class="hidden-xs hidden-sm hidden-md">'+json['button_in_cart']+'</span>').addClass('in_cart');
    }, 100);
    // Need to set timeout otherwise it wont update the total
    setTimeout(function () {
    $('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');
    $('[onclick *= "\''+product_id+'\'"][onclick *= "cart.add"]').html('<i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">'+json['button_cart']+' </span>').removeClass('in_cart');
    $('.'+ product_id).html(''+json['button_cart']+'').removeClass('in_cart');

    }, 100);

    Стили
    Если товар в корзине у кнопки доп. класс
    Код:
    .in_cart
    например
    в конец catalog/view/theme/default/stylesheet.css
    [​IMG]
    Код:
    .product-thumb .button-group button.in_cart {
        background-color: #fff;
    }
    .product-thumb .button-group button.in_cart:hover {
        background-color: #eee;
    }

    [​IMG]
    Код:
    #button-cart.in_cart {
        color: #2199c7;
        text-shadow: none;
        background-color: white;
        background-image: none;
        background-repeat: no-repeat;
        border-color: #2199c7;
    }
    
    #button-cart.in_cart:hover {
        color: #1f88b0;
        border-color: #1f88b0;
    }
     
    Последнее редактирование: 9 июн 2022
    mracula, petyann и Ravilr нравится это.
  3. petyann

    petyann Новичок

    Сообщения:
    28
    Симпатии:
    0
    На страницах категорий при добавлении не работает на лету, кнопка не изменяется (приходится перезагружать страницу), а вот при удалении на лету меняется сразу.
    В карточке товара всё работает отлично.
     
  4. mracula

    mracula Пользователь

    Сообщения:
    64
    Симпатии:
    2
    Только при перезагрузке страницы кнопка становится прежней, в не зависимости есть товары в корзине или нет
     
  5. mracula

    mracula Пользователь

    Сообщения:
    64
    Симпатии:
    2
    Подскажите как при обновлении страницы сохранить текст кнопки уже в корзине?
     
  6. fanatic

    fanatic Продвинутый пользователь

    Сообщения:
    1.415
    Симпатии:
    239
    в контроллере проверили, есть ли товара в корзине
    кидаем флаг в шаблон
    в шаблоне, в зависимости от флага, выводим текст на кнопке
     
  7. mracula

    mracula Пользователь

    Сообщения:
    64
    Симпатии:
    2
    т.е в контроллере продукта проверяем наличие товара в корзине?
    типа так
    PHP:
    foreach ($this->cart->getProducts() as $p_cart) {
                if (
    $p_cart['product_id'] == $product_id) {   
           }
            }
     
  8. Pie

    Pie Активный пользователь

    Сообщения:
    121
    Симпатии:
    28
    Тогда при добавлении в корзину не изменится название кнопки и нужно дописать дополнительный костыль на js чтобы менял название пока страница не обновится