Como posso lidar com quantidades fracionadas em um carrinho de compras e-store?
-
10-07-2019 - |
Pergunta
Estou construindo um e-loja e eu preciso ter a capacidade de adicionar quantidades fracionadas ao carrinho de compras.
do administrador iria definir um denominador por produto (por exemplo, 8 significa que o mínimo de compra é 1/8 de um caso)
Eu uso atualmente um jQuery controle deslizante e indicar a quantidade na asp:Label
que funciona muito bem em páginas de produto, no entanto, ele fica fora de mão com vários controles deslizantes no carrinho (Eu preciso para permitir que o cliente para ajustar quantidades no carrinho).
Eu realmente quero ficar longe de listas suspensas feias.
Todas as idéias?
EDIT:
denominador fixa está fora de questão ... 4/8 tem que mostrar como 1/2 ...
EDIT2:
A usabilidade é importante também, + 1 / incremento denominador por clique não vai funcionar muito bem quando um cliente quer ir de 1 / 16th de um caso para 3 casos
EDIT3:
@RichB: adicionando uma SKU para uma fração de um caso remonta ao problema denominador fixo. se eu adicionar um SKU para 1 / 16th de um caso, e um usuário quer 1/2 de um caso, eles teriam de 8x1 ordem / 16 do [não é legal]. Se você quiser adicionar um SKU para cada fração possível (15 SKUs neste exemplo -. Isso vai fazer a minha página do produto e da maneira CART para desordenado
Solução 5
Eu acabei ligando uma página de produto para quantidades no carro, assim os usuários podem atualizar as frações com o controle deslizante na página do produto.
Outras dicas
Uma forma seria para você ter a sua caixa de texto quantidade seguido por uma string "/ [denominador]" que lhes permitiria dizer algo como [4] / 8 para designar metade de um caso de 8.
O seu único problema é que você vai ter um método simples para acompanhar o que esses denominadores são.
Outra solução possível (desde que você é contra ter um denominador fixo), é usar uma série de Up / Down setas botões / / whatever e você pode usar a cima e para baixo para aumentar ou diminuir a quantidade de produto (e em cada incremento / decréscimo atualizar corretamente o valor fracionário no rótulo).
Editar :. Isso poderia ser ainda mais refinado, adicionando em um botão de aumentar / diminuir separado para modificar a quantidade por uma caixa inteira em vez de um único valor fracionário
Eu teria um único campo, que pode ser editado a uma quantidade como 3 6/4
. No entanto, quando as perde o campo foco, este será convertido em simples fração mista (4 1/2
para o meu exemplo).
Isto permite flexibilidade de entrada, bem como bom número de formatação.
Atualizar : OP diz que "isso é exatamente o que eu estou usando agora, no entanto, quando eu chegar ao carrinho [e tem 10 itens no carrinho] gerenciamento de múltiplos controles deslizantes se torna problemático é por isso que eu'. m procurando uma solução alternativa "
Será que algo como o seguinte trabalho?
Veja trabalhando aqui . (Edit-lo aqui )
<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);
}
Eu ia ficar longe de usar unidades fracionárias. Em vez de tentar algo parecido com isso.
[_ _ _] casos [_ _ _] unidades individuais
Uso 2 SKU, 1 para um caso, e 1 para uma unidade individual.
Ou definir uma divisão como uma fração de um caso, com product.quantity_per_case.
Quando eu corri restaurantes, eu gostaria hora como esta o tempo todo. Ele requer quase nenhum pensamento, como você não está lidando com frações, mas os números inteiros de casos e números inteiros de unidades.
A maioria das pessoas vai precisar de casos ou racha, mas não ambos.