2015-09-14 2 views
0

Я хочу заменить в корзину двумя кнопками, которые являются плюсом и минусом в OpenCart 2.0.1.1, теперь я не могу запрограммировать кнопку минус должным образом. я добавил плюс и Миус кнопку в catalog/view/theme/*/template/module/featured.tpl и сделать вызов в catalog/controller/api/cart.php и в common.js я поставил URL как url: 'index.php?route=checkout/cart/minus и остальная часть кода находится нижеДобавить 'plus' 'минус' вместо 'добавить в корзину' в opencart

system/library/cart.php 

public function minus($product_id, $qty) 
{ 
    $this->data = array(); 
    $qnt1 = 1; 
    $product['product_id'] = (int)$product_id; 
    $key = base64_encode(serialize($product)); 
    if ((int)$qty && ((int)$qty > 0)) { 
     if (!isset($this->session->data['cart'][$key])) { 
      $this->session->data['cart'][$key]-= (int)$qty; 
     } 
     else { 
      $this->remove($key); 
     } 
    } 
} 

[Image for plus minus button in place of "Add to cart" Button] [1] 
+0

У вас есть ответ на это? или вы решили? Если нет, скажите мне, что у меня есть решение для этого – Sudarshan

+0

, пожалуйста, дайте мне. – ankit

+0

Хорошо, что я могу дать вам минус-функциональность, вы можете сделать то же самое для повышения, n Я думаю, что приращение - это не что иное, как вызов функции add в вашей корзине. потому что код бит длинный – Sudarshan

ответ

1

Для того, чтобы уменьшить ваше количество продукции вам нужно product_id и его количество , Для уменьшения нужно проверить, является ли qty больше 1 или нет, если это то, что мы можем уменьшить еще, нам нужно удалить весь продукт, если qty равен только 1.

Вещи, которые нужно изменить, - это ваша страница просмотра, добавьте плюс, минус-иконки, затем контроллер, затем библиотека, затем верните результат ajax. Я постараюсь сделать это как можно проще.

Позволяет начать с просмотром страницей в моем случае это products.tpl кода я writteb получить плюс кнопку минус

<table class="table scroll"> 
<tbody> 
    <?php foreach ($products as $product) { ?> 
    <tr > 
    <td > 
     <input type="text" style="width: 20px; height: 20px;font-weight:700 " disabled="true" value="<?php echo $product['quantity']; ?>" class="text-center"> 
     </td> 

     <td class="text-left"> 
     <a href="<?php echo $product['href']; ?>"> 
      <b><?php echo $product['name']; ?></b> 
     </a> 
     </td> 

     <td style=" text-align:right"> 
     <i class="fa fa-minus-circle fa-2x" style="cursor: pointer;color:red;" onclick="cart.remove('<?php echo $product['key']; ?>');"></i> 
     </td> 
    </tr> 

    <tr> 
     <td colspan="2" style="border:0 none;"> 
     <div class="btn-group form-inline" role="group"> 
      <button type="button" style="height:25px;width:25px" class="btn btn-default btn-xs " onclick="cart.decrement('<?php echo $product['product_id']; ?>');"> 
      <i class="fa fa-minus"></i> 
      </button> 

      <button type="button" style="height:25px;width:25px" class="btn btn-default btn-xs" onclick="cart.add('<?php echo $product['product_id']; ?>');"> 
      <i class="fa fa-plus"></i> 
      </button> 
     </div> 
     </td> 
     <td style="border:0 none;" class="text-right" > 
     <b><?php echo $product['total']; ?></b> 
     </td> 
    </tr> 

    <?php } ?> 

Здесь я сделал яваскрипт вызова AJAX OnClick. Поэтому давайте посмотрим, что делает этот звонок. Я написал на той же странице, которую вы можете написать в любом .js файле, если хотите. script.js

'decrement': function(key) { 
$.ajax({ 
url: 'index.php?route=checkout/cart/decrement', 
type: 'post', 
data: 'key=' + key, 
dataType: 'json', 
beforeSend: function() { 
$('#cart > button').button('loading'); 
}, 
complete: function() { 
$('#cart > button').button('reset'); 
}, 
success: function(json) { 
// 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>'); 
}, 100); 

if (getURLVar('route') == 'checkout/cart' || getURLVar('route') == 'checkout/checkout') { 
location = 'index.php?route=checkout/cart'; 
} else { 
$('#cart > ul').load('index.php?route=common/cart/info ul li'); 
} 
} 
}); 
} 

Теперь URL мы звонок из выше Ajax вызова путь для нашего контроллера проверки и функции декремента. Вот что

controller.php

public function decrement() { 
    $this->load->language('checkout/cart'); 

    $json = array(); 

    // Remove 
    if (isset($this->request->post['key'])) { 
    $this->cart->decrement_product_quantity($this->request->post['key'],1); 

    unset($this->session->data['vouchers'][$this->request->post['key']]); 

    $this->session->data['success'] = $this->language->get('text_remove'); 
    // rest of the code keep same} 

Теперь же вы заметили, мы вызываем функцию библиотеки decrement_product_quantity пропусканием Количество и 1. Здесь ключ не что иное, как АЯКС параметра, который product_id.

Теперь последняя функция в библиотеке

public function decrement_product_quantity($product_id, $qty = 1){ 
$this->data = array(); 
$product['product_id'] = (int)$product_id; 
$key = base64_encode(serialize($product)); 

if ((int)$qty && ((int)$qty > 0)) { 
if ($this->session->data['cart'][$key]>1) { 
$this->session->data['cart'][$key] -= (int)$qty; 
} else { 
$this->remove($key); 
} 
} 
} 

это один проверяет корзину, если кол-во больше 1 будет уменьшать еще удалить весь продукт. Надеюсь, вы поняли, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы. Также надеюсь, что вы можете сделать и для увеличения. удачи

+0

Большое спасибо, как я могу добавить текстовое поле количества для определенного продукта между кнопкой плюс минус. – ankit

+0

Я отредактировал код страницы просмотра. – Sudarshan

+0

, где вы показываете кнопку qty или плюс или минус, просто придерживайтесь ссылок, вы можете показать qty, plus, минус на странице продуктов тоже и в товарах. Если мои усилия помогли вам, пожалуйста, отметьте мой ответ @AnkitAgarwal – Sudarshan

0

Проблема со стандартным opencart с 2.0, что поля сообщения с индексом длиной более 64 символов игнорируются (в некоторых системах, по крайней мере, для моего клиента).

Так что если у вас есть продукт без опций, чем количество полей [index] получено почтовым запросом, потому что индекс меньше 64 символов. Но если у продукта есть опция, чем индекс больше 64 символов и поле не принимается в почтовом запросе (через ajax или нет).

Поставщик от моего клиента не хочет изменять это на общем сервере, мое решение выглядит так, как оно работает в старой версии opencart (я думаю, что он используется только в программе/системе/библиотеке/тележке .php) и взять его в 2.0, и ваша проблема решена .. индекс короче в старых версиях .. потому что не все поля используются для base64_encode.

Загляните в html-код вашей корзины и найдите количество полей [..] и подсчитать символы вашего индекса .. для меня, когда дольше 64 символов (например, опция продукта), поле больше не получено в почтовом запросе (через ajax или нет).

Возможно, если у вас есть собственный сервер, у вас нет этой проблемы.

Смежные вопросы