Вход • Регистрация

Количество единиц товара и кнопка "Купить"

  • 20 декабря 2011 г.
  • Всем привет!

    Столкнулся с такой проблемой: при нажатии на кнопку "Купить" несколько раз — товар в корзине тоже суммируется. Как вообще избавиться от этого суммирования? То есть, чтобы при нажатии на "Купить" добавлялся в корзину только один товар и все; какая функция отвечает за это хозяйство? может можно вставить проверку, типа "если товар добавлен в корзину — кнопка выключается/ выводится надпись: "Вы уже положили это в корзину"

    З.Ы. У меня в магазине продаются строго штучные товары, то есть не бывает одного товара в двух, трех и тд. экземплярах.
    По сути мне вообще не нужен параметр (счетчик) количества единиц одного товара в корзине.
    Пока решение очень некрасивое: проставить всем товарам количество 1
    • 20 декабря 2011 г. , редакция: 20 декабря 2011 г.
    • Файл shop.ajax.php строка 50
      добавить еще одно условие или ниже...
      Код
      if (! empty($_SESSION["basket"][$_POST['addshop']])) { return TRUE; }


      З.Ы: не проверял, интуиция подсказывает
  • 01 марта 2012 г. , редакция: 01 марта 2012 г.
  • А как совсем убрать количество товаров рядом с кнопкой "Купить"? В частности где формируется этот вывод кнопки и счетчика товаров:
    Код
    <form class="shop-form ajax" action="" method="post">
    <input type="hidden" value="4" name="addshop">
    <input type="hidden" value="shop" name="module">
    <input type="hidden" value="1" name="ajax">
    <input id="acpro_inp32" class="inpnum" type="text" size="1" name="count" value="1">
    <span class="button_wrap">
    <input class="button" type="submit" value="Купить">
    </span>
    <div class="error">В корзине 1 шт.</div>
    </form>
    ?
    А то нужно, чтобы цена и "Купить" были рядом на одной линии и после добавления товара в корзину кнопка "Купить" становилась бы неактивной. Пробовал решение выше, ничего не меняется, но мне желательно сменить саму структуру формы <form class="shop-form">. Может быть есть какие мысли?
    Да, еще нужно появляющуюся надпись "В корзине ... шт." убрать, если кнопка будет неактивной.
    • 02 марта 2012 г.
    • в shop.view.php
      В шаблоне кнопки купить убрать строку <input type="text" ...>
      Если не найдёте, скажите. Тогда конкретнее опишу.
      >Да, еще нужно появляющуюся надпись "В корзине ... шт." убрать, если кнопка будет неактивной.
      Совсем убрать? Или человек один раз кликнул, надпись появилась?
      Так он же больше не может кликать?
  • 02 марта 2012 г.
  • Нашел в shop.view.php функции
    Код
    private function form_($row, $result)

    Ниже эта форма <form class="shop-form"> и выводится. Не знаю, как раньше найти не мог. Закомментировал нужные инпуты и div class="error", всё как надо вышло. А вот как сделать кнопку "Купить" неактивной после одного нажатия.
    Заказчик хочет кнопку как на сайте znachkiopt.ru. Там, после нажатия на кнопку "в корзину", она становится неактивной (уточнение количества товаров предполагается после этого в самой корзине), правда там это реализовано на JS. Возможно ли это сделать штатными средствами Диафана?
    • 02 марта 2012 г.
    • Решение Гарика вверху не подходит?
      • 02 марта 2012 г.
      • Оно работает, да. После добавления товара в корзину кнопка перестает снова добавлять товар, НО, хотелось бы чтобы при этом менялся класс кнопки, так как она остаётся прежней, просто не добавляет товар. А как сменить класс после нажатия? Просто a:visited здесь не имеет смысла.
  • 09 марта 2012 г. , редакция: 09 марта 2012 г.
  • Подскажите кто-нибудь по JS. Условие выше - чтобы после нажатия на кнопку "Купить" менялся её класс (чтобы становилась неактивным блоком). Кнопка в магазине такая:
    Код
    <input type="submit" class="buy-button" value="' . $this->_('BUY', FALSE) . '">


    То есть первичный класс у кнопки buy-button. Нужно после нажатия поменять её на класс buy-button_act.
    Сделал так:
    Код
    $(document).ready(function() {
    $('.buy-button').click(function(){
    $('input[type=submit]').removeClass('buy-button');
    $(this).addClass('buy-button_act');
    });
    });

    После этого класс меняется у всех кнопок сразу.

    Причем меняется на нужный класс нажатая кнопка, а у остальных кнопок класс исчезает, то есть он прописан в инпуте так class="".
    Как поменять класс только у нажатой, а у остальных оставить прежний? Через событие OnClick попробовать или первым способом, но что тогда дописать?
    • 09 марта 2012 г.
    • Каждой кнопку по уникальному классу.
      И скрипт повторяете такое же число раз, сколько кнопок.
      Простейшая реализация через $I++
      Уверен, что есть способ лучше. Но этот простой и первый, что пришёл мне в голову.
      • 09 марта 2012 г.
      • +1.
        Или кнопке или слою выше. Скрипту надо же как-то идентифицировать, что ему менять. Если все кнопки одинаковые, он все и меняет.

        Еще лучше не через $i++, а просто присобачивать $row[id] товара и все.
        • 09 марта 2012 г. , редакция: 09 марта 2012 г.
        • Код
          echo '<script type="text/javascript">
          $(document).ready(function() {
          $(\'.buy-button'.$row["id"].'\').click(function(){
          $(\'input[type=submit]\').removeClass(\'buy-button'.$row["id"].'\');
          $(this).addClass(\'buy-button_act\');
          });
          });
          </script>';

          echo '<input type="submit" class="buy-button'.$row["id"].'" value="' . $this->_('BUY', FALSE) . '">';


          В ф-ию:
          private function form($row, $result)
  • 10 марта 2012 г.
  • Спасибо за предложенные варианты. Только, почему-то Ваш, Станислав, скрипт не выполняется. По идее, чтобы выполнялся $row[id], нужно скрипт именно в php заключить, но как js вставленным таким образом он, кажется, не срабатывает.
    Код
    if (! empty($_SESSION["basket"][$_POST['addshop']])) { return TRUE; }
    - это не может влиять?
    Вообще помог такой вариант с заменой value:
    Код
    $(document).ready(function() {
    $('.buy-button').click(function(){
    $(this).removeClass('buy-button');
    $(this).addClass('buy-button_act');
    $(".buy-button_act").val('В корзине')
    });
    });



    только это, конечно, баловство и нужно по нормальному делать с языковой переменной и плюс чтобы после перезагрузки страницы кнопка оставалась "В корзине", то есть что товар уже добавлен.
    • 10 марта 2012 г.
    • Вы куда мой скрипт вставляете?
      • 11 марта 2012 г. , редакция: 11 марта 2012 г.
      • 974 строчка shop.view.php сразу после функции if ($row["depend"])
        Код
        if ($row["depend"]) {...
        ... }
        echo '<script type="text/javascript">
        $(document).ready(function() {
        $(\'.buy-button'.$row["id"].'\').click(function(){
        $(\'input[type=submit]\').removeClass(\'buy-button'.$row["id"].'\');
        $(this).addClass(\'buy-button_act\');
        });
        });
        </script>';
        echo '<input type="submit" class="buy-button'.$row["id"].'" value="' . $this->_('BUY', FALSE) . '">';
        echo '</form>';

        return TRUE;
        }

        Тут еще <div class="error"> отсутствует за ненадобностью.

        Хотя работает, только не совсем правильно. Получается так - после обновления страницы каталога стили у кнопок сразу удаляются (потому как у каждой кнопки пишет class="buy-button1",class="buy-button2" (т.е. как и прописано добавляет id к классу, но для оформления кнопки все классы разные получаются, поэтому выводит без стилей) и т.д., а после нажатия выводит как положено buy-button_act. Может $row[id] надо не к классу добавлять?

        Опять же если просто добавить пробел меж buy-button и $row[id], то buy-button стиль к кнопке применяется, но после нажатия ничего не происходит.
        • 11 марта 2012 г.
        • Зачем так извращаться есть файлик специальный
          <script type="text/javascript" src="http://diafan/dengi/js/user-func.js"></script>
          туда и вставляем все наши jQuery или если хотите собственный файлик делаем для защиты от автоматических обновлений.
          строчки то можно объединять если реч идёт про одно и тоже а не делать кучу раз одни и теже выборки.
          не
          Код
          $(this).removeClass('buy-button');
          $(this).addClass('buy-button_act');

          а
          Код
          $(this).removeClass('buy-button').addClass('buy-button_act');

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум