Вывод поля количества товара в модулях (последние, хиты, рекомендуемые)

Тема в разделе "OpenCart", создана пользователем pascha, 26 янв 2013.

  1. pascha

    pascha

    Регистрация:
    26 ноя 2012
    Сообщения:
    0
    Симпатии:
    1
    Итак, задача состоит в выводе поля выбора количества товара в модулях (последние, хиты, рекомендуемые).
    Что делал (по аналогии с выводом данной опции в карточке товара: модуль bestseller)

    catalog/controller/module/bestseller.php


    Код:
    $this->data['text_minimum'] = sprintf($this->language->get('text_minimum'), $product_info['minimum']);

    Код:
    'minimum'		=> $result['minimum'],
    Код:
    if ($product_info['minimum']) {
    	$this->data['minimum'] = $product_info['minimum'];
       } else {
    	$this->data['minimum'] = 1;
     
    
    catalog/view/theme/default/template/module/bestseller.tpl

    Код:
    <div class="cart"><input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" /></div>
    
    поменял на:

    Код:
    <div class="cart">
    		  <input type="text" name="quantity" size="2" value="<?php echo $minimum; ?>" />
    		  <input type="hidden" name="product_id" size="2" value="<?php echo $product_id; ?>" />
    		 <input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');" class="button" />
    </div>
    
    Итог: отображение окна ввода количества товара есть, при вводе любого количества- в корзину улетает 1 товар.
    Поправьте пожалуйста.
     
  2. Baco

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    803
    Симпатии:
    399
    Вроде всё верно, только вот в контроллере, я бы проставил:
    Код:
    'minimum'	=> $result['minimum'] ? $result['minimum'] : 1 ,
    'text_minimum' => sprintf($this->language->get('text_minimum'), $result['minimum']),
    То есть, что б получилось что то типа:
    Код:
    $this->data['products'][] = array(
    				'product_id' => $result['product_id'],
    				'thumb'		=> $image,
    				'name'		=> $result['name'],
    				'price'		=> $price,
    				'special'	  => $special,
    				'minimum'	=> $result['minimum'] ? $result['minimum'] : 1 ,
    				'text_minimum' => sprintf($this->language->get('text_minimum'), $result['minimum']),
    				'rating'	=> $rating,
    				'reviews'	=> sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
    				'href'		=> $this->url->link('product/product', 'product_id=' . $result['product_id']),
    			);
     
    pascha нравится это.
  3. pascha

    pascha

    Регистрация:
    26 ноя 2012
    Сообщения:
    0
    Симпатии:
    1
    изменил...добавляется 1 товар (((
    http://portalbest.elitno.net/proba/
    bestseller.php

    bestseller.tpl
     
  4. Baco

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    803
    Симпатии:
    399
    pascha нравится это.
  5. pascha

    pascha

    Регистрация:
    26 ноя 2012
    Сообщения:
    0
    Симпатии:
    1
    Baco, огромное тебе спасибо, все получилось)
    итак решение моей проблемы (думаю реализуемо во всех модулях, буду пробовать)
    /catalog/view/theme/default/template/module/bestseller.tpl
    Найти:

    Код:
    <input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" />
    Заменить на:
    Код:
    <input type="text" value="1" class="item-<?php echo $product['product_id']; ?>" />
    <input type="button" value="<?php echo $button_cart; ?>" onclick="addQtyToCart('<?php echo $product['product_id']; ?>');" class="button" />
    Подключаем скрипт ( я вставил после последнего </div> ):
    Код:
    <script type="text/javascript"><!--
    function addQtyToCart(product_id) {
      var qty = $('.item-' + product_id).val();
      if ((parseFloat(qty) != parseInt(qty)) || isNaN(qty)) {
    		qty = 1;
      }
      addToCart(product_id, qty);
    }
    //--></script> 
    Внимание!
    Проверить соответствие в
    catalog/view/javascript/common.js

    Код:
    function addToCart(product_id, quantity) {
    quantity = typeof(quantity) != 'undefined' ? quantity : 1;
    $.ajax({
      url: 'index.php?route=checkout/cart/update',
      type: 'post',
      data: 'product_id=' + product_id + '&quantity=' + quantity,
    Если так:
    Код:
    function addToCart(product_id) {
    $.ajax({
    url: 'index.php?route=checkout/cart/update',
    type: 'post',
    data: 'product_id=' + product_id,
    То меняем на:

    Код:
    function addToCart(product_id, quantity) {
    quantity = typeof(quantity) != 'undefined' ? quantity : 1;
    $.ajax({
      url: 'index.php?route=checkout/cart/update',
      type: 'post',
      data: 'product_id=' + product_id + '&quantity=' + quantity,
     
  6. pascha

    pascha

    Регистрация:
    26 ноя 2012
    Сообщения:
    0
    Симпатии:
    1
    теперь еще хотелось бы усовершенствовать:
    сделать вот так:

    [​IMG]

    есть примеры реализации?
     
  7. Baco

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    803
    Симпатии:
    399
  8. pascha

    pascha

    Регистрация:
    26 ноя 2012
    Сообщения:
    0
    Симпатии:
    1
    ниасилил))))
    в bestseller.tpl
    Код:
    <div class="cart"><input type="text" name="quantity" size="2" value="<?php echo $minimum; ?>" class="item-<?php echo $product['product_id']; ?>" />
    <input type="button" value="<?php echo $button_cart; ?>" onclick="addQtyToCart('<?php echo $product['product_id']; ?>');" class="button" /></div>  
    в xml
    если:

    Код:
    <search position="replace"><![CDATA[<input type="text" name="quantity" size="2" value="<?php echo $minimum; ?>" class="item-<?php echo $product['product_id']; ?>" />]]></search>
    Код:
    ..... onclick="btnminus(<?php echo $minimum; ?>);">
    <input type="text" name="quantity" size="2" value="<?php echo $minimum; ?>" class="item-<?php echo $product['product_id']; ?>" /> <img alt="" ....... 
    не работает...(((
    убираю и там и там, или поочередно
    Код:
    class="item-<?php echo $product['product_id']; ?>"
    начинает работать, но при нажатии на + или - в любом товаре: число меняется только в первом товаре (ну это и понятно))))
    Вот такие дела)))
     
  9. pascha

    pascha

    Регистрация:
    26 ноя 2012
    Сообщения:
    0
    Симпатии:
    1
    проблему решил путем ввода в документ обычного js скрипта "плюс- минус"
    Код:
    </script>
     
     
    <style type="text/css">
    	span {cursor:pointer; }
    </style>
    <script type="text/javascript" >
    $(document).ready(function() {
    	$('.minus').click(function () {
    		var $input = $(this).parent().find('input');
    		var count = parseInt($input.val()) - 1;
    		count = count < 1 ? 1 : count;
    		$input.val(count);
    		$input.change();
    		return false;
    	});
    	$('.plus').click(function () {
    		var $input = $(this).parent().find('input');
    		$input.val(parseInt($input.val()) + 1);
    		$input.change();
    		return false;
    	});
    }); 
     
    </script>
    Код:
    <div class="cart"><span class="minus"><img src="catalog/view/theme/default/image/minus.png"></span><input type="text" name="quantity" size="2" value="<?php echo $minimum; ?>" class="item-<?php echo $product['product_id']; ?>" /><span class="plus"><img src="catalog/view/theme/default/image/plus.png"></span>
    <br />
    <input type="button" value="<?php echo $button_cart; ?>" onclick="addQtyToCart('<?php echo $product['product_id']; ?>');" class="button" /></div>  
    все работает на ура, если б не одно "но"... на кнопке при наборе количества стрелками надпись "купить" так же меняется на цифры- количество товара)))) ( скрипт отрабатывает все input*ы что есть в документе )
     
  10. pascha

    pascha

    Регистрация:
    26 ноя 2012
    Сообщения:
    0
    Симпатии:
    1
    пришлось рисовать и менять кнопку )))
    Код:
    <input type="button" value="<?php echo $button_cart; ?>" onclick="addQtyToCart('<?php echo $product['product_id']; ?>');" class="button" />
    на
    Код:
    <button onClick="addQtyToCart('<?php echo $product['product_id']; ?>');"><img src=catalog/view/theme/default/img/button_buy_b.png></button>
     
  11. DeLeon

    DeLeon

    Регистрация:
    27 окт 2016
    Сообщения:
    11
    Симпатии:
    1
    Пытаюсь сделать подобную фишку всё получилось красиво удобно, но при нажатии на + добавляет количество товаров равное значению показывать на странице(количество товаров)и +1 не могу найти в чём проблема вот мой код
    category.php
    Код:
                        'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
    category.tpl
    Код:
    <div class="qty">
     <div class="quantity-adder text-center">
          <div class="quantity-wrapper text-center">
          <span class="add-down add-action fa fa-minus"></span>
              <input type="text" name="quantity" class="quantity" size="2" value="<?php echo $product['minimum']; ?>" data-maximum="<?php echo $product['quantity']; ?>" />     
    
          <span class="add-up add-action fa fa-plus" ></span>
      <button class="btn btn-primary"  type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', $(this).parent().find('.quantity').val() );"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button>
    
        </div>
    
    </div>
    </div>   
    
    
        <script>
        $(document).ready(function() {
            quantity_control();
        });
        function quantity_control() {
        $('.quantity').each(function() {
        var minimum = $(this).val();
        var maximum = $(this).attr('data-maximum');
        $(this).next().click(function () {
        if ((~~$(this).prev().val()+ ~~minimum) <= ~~maximum) {
            $(this).prev().val(~~$(this).prev().val()+ ~~minimum);
        }
        });
        $(this).prev().click(function () {
        if ($(this).next().val() > ~~minimum) {
            $(this).next().val(~~$(this).next().val()- ~~minimum);
        }
        });
        });
        }
        </script>
    
    Ну и CSS разумеется, мне кажется дело в скрипте? Как исправить подскажите пож шаблон не def