Как я могу обрабатывать дробные количества в корзине интернет-магазина? - PullRequest
1 голос
/ 11 марта 2009

Я создаю интернет-магазин, и мне нужно иметь возможность добавлять дробные количества в корзину.

Администратор установит знаменатель для каждого продукта (например, 8 будет означать, что минимальная покупка составляет 1/8 от случая)

В настоящее время я использую ползунок jQuery и отображаю количество в asp:Label, которое прекрасно работает на страницах товаров, однако оно выходит из-под контроля с несколькими ползунками в корзине (мне нужно клиент корректирует количество в корзине).

Я действительно хочу держаться подальше от уродливых выпадающих списков.

Есть идеи?

EDIT:

Фиксированный знаменатель исключен ... 4/8 нужно показывать как 1/2 ...

EDIT2:

Удобство использования также важно, + 1 / приращение знаменателя за клик не будет работать слишком хорошо, когда клиент хочет перейти от 1/16 дела к 3 случаям

EDIT3:

@ RichB: добавление SKU для доли дела возвращает к проблеме фиксированного знаменателя. если я добавлю SKU для 1/16 случая, а пользователь хочет половину случая, он должен будет заказать 8x1 / 16th [не круто]. Если вы хотите добавить SKU для каждой возможной дроби (в данном примере 15 SKU), это приведет к тому, что моя страница продукта и CART будут загромождены.

Ответы [ 6 ]

0 голосов
/ 07 июня 2010

Я бы держался подальше от использования дробных единиц. Вместо этого попробуйте что-то вроде этого.

[_ _ _] кейсы [_ _ _] отдельные единицы

Используйте 2 SKU, 1 для случая и 1 для отдельной единицы.

Или определите разделение как дробь кейса с помощью product.quantity_per_case.

Когда я управлял ресторанами, я все время так заказывал. Это почти не требует размышлений, поскольку вы имеете дело не с дробями, а с целым числом дел и целыми числами единиц.

Большинству людей нужны либо кейсы, либо сплиты, но не оба.

0 голосов
/ 21 марта 2009

Я закончил тем, что связал страницу продукта с количествами в корзине, чтобы пользователи могли обновлять дроби с помощью ползунка на странице продукта.

0 голосов
/ 11 марта 2009

Обновление : OP говорит: «Это именно то, что я сейчас использую, однако, когда я добираюсь до КОРЗИНЫ [и у меня есть 10 товаров в корзине], управление несколькими слайдерами становится проблематичным. ищу альтернативное решение "

Хотелось бы что-нибудь вроде следующей работы?

Посмотрите, как работает здесь . (отредактируйте его здесь )

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<link rel="stylesheet" href="http://jquery-ui.googlecode.com/svn/tags/1.7/themes/base/ui.all.css" type="text/css" /> 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7/jquery-ui.min.js"></script> 

<div class="demo"> 
    <p> 
        <label for="amount">amount :</label> 
        <input type="text" id="amount" /> 
    </p>     
 <div id="slider"></div> 
</div>

var maxDenominator = 16;
var maxWholeCases = 50;

function toFraction(sliderValue){
  var amount = sliderValue / maxDenominator;

  var whole = Math.floor(amount);
  var fractional = "";

  if (amount - whole)
     fractional =  fractApprox(amount - whole, maxDenominator);

  return whole + " " + fractional + " cases";
}

$(function() {
    $("#slider").slider({
        value:10 * maxDenominator,
        min: 0,
        max: maxWholeCases * maxDenominator,
        slide: function(event, ui) {
            $("#amount").val(toFraction(ui.value));
        }
    });
    $("#amount").val(toFraction($("#slider").slider("value")));
});


// from http://www.geneffects.com/briarskin/programming/newJSMathFuncs.html#fractApprox
function fractApprox(x,maxDenominator) {
    // Created 1997 by Brian Risk.  http://brianrisk.com
    maxDenominator = parseInt(maxDenominator);
    var approx = 0;
    var error = 0;
    var best = 0;
    var besterror = 0;
    for (var i=1; i <= maxDenominator; i++) {
        approx = Math.round(x/(1/i));
        error = (x - (approx/i))
        if (i==1) {best = i; besterror = error;}
        if (Math.abs(error) < Math.abs(besterror)) 
            {best = i; besterror = error;}
    }
    return (Math.round(x/(1/best)) + "/" + best);
}
0 голосов
/ 11 марта 2009

У меня было бы одно поле, которое можно редактировать до количества, такого как 3 6/4. Однако, когда поле теряет фокус, оно будет преобразовано в простейшую смешанную дробь (4 1/2 для моего примера).

Это обеспечивает гибкость ввода, а также удобное форматирование чисел.

0 голосов
/ 11 марта 2009

Другое возможное решение (поскольку вы против наличия фиксированного знаменателя) - это использовать последовательность стрелок / кнопок вверх / вниз / чего угодно, и вы можете использовать стрелки вверх и вниз для увеличения или уменьшения количества продукта (и включения каждое увеличение / увеличение корректно обновляет дробное значение в метке).

Редактировать : Это можно уточнить, добавив отдельную кнопку увеличения / уменьшения, чтобы изменить количество для всего случая, а не для одной дробной суммы.

0 голосов
/ 11 марта 2009

Один из способов заключается в том, чтобы текстовое поле количества указывало за строкой "/ [denominator]", которая позволяла бы им произносить что-то вроде [4] / 8, чтобы обозначить половину падежа 8.

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

...