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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top