16th abr 2009

O POG nosso de cada dia #6

Mais um pra série; dessa vez, o requisito é uma funcionalidade em uma página para direcionar o usuário para uma ou outra página dependendo do estado/cidade que ele escolher – o cliente passa a lista das cidades que são excessão, umas 5, e redirecionam para uma url; as demais, mandam para outra url.
Implementei dois selects, um que de cara já lista todos os estados do Brasil e que, quando tem um estado selecionado, populo o outro select com as cidades desse estado usando requisição assíncrona via javascript pegando a lista do backend. Com isso, como fazer para redirecionar o usuário?

Solução bonita

Dar o submit no form para uma url para que o backend receba o id da cidade e verifique numa lista para qual url será feito o redirecionamento. Essa lista pode estar, por exemplo, numa tabela do banco relacionada com a tabela de cidades (que populou o select).

O Problema

Tempo e custo. Alterar o backend é sempre mais caro e mais demorado. E o cliente não queria aprovar dessa forma…

POG

Simples: tratar regra de negócio na interface. Nunca é correto, mas é mais rápido…
Tendo o select com as cidades (imaginando que esse é populado por javascript, requisição assíncrona):

<select name=”stateCities” id=”stateCities”>
<option value=”1″>cidade 1</option>
<option value=”2″>cidade 2</option>
<option value=”3″>cidade 3</option>
<option value=”4″>cidade 4</option>
<!– etc… –>
</select>

é só criar um listener no onchange desse select (fiz isso usando a Prototype) que verifica se o value da cidade selecionada está num array pré-definido (e hard-coded). Se estiver, direciono para uma url, senão, para outra…

Event.observe(“stateCities”, “change”, function() {
/*
lista das cidades que redirecionam para url 1
Campinas: 7
Ribeirão Preto: 54325
São José dos Campos: 78768
*/
var cities = ["7", "54325", "78768"];
//usa método member de Enum da prototype para verificar se existe elemento no array
if(cities.member($F(this)))
window.open(“http://www.minhaurl1.com”);
else
window.open(“http://www.minhaurl2.com”);
});

Posts relacionados

Avalie

1 estrela2 estrelas3 estrelas4 estrelas5 estrelas (No Ratings Yet)

9 Responses to “O POG nosso de cada dia #6”

  1. Cleiver says with Firefox on Windows XP

    Pelo menos comentou no código de qual cidade são os IDs. :P

  2. Chris says with Firefox on Ubuntu 8.10

    Comentar código é uma boa prática… até porque em algum momento terei que dar manutenção nisso e preciso me lembrar do que fiz!

  3. Thiago Cavalcanti says with Firefox on Ubuntu 8.10

    Uma coisa dessas não acontece comigo. Sempre deixo bem claro para o cliente que não faço POG em hipótese alguma e que isso tem um custo adicional, se não gostar chame outro (e chamam, mas pelo menos eu economizo na dor de cabeça depois e não me exponho à críticas).

  4. Chris says with Firefox on Ubuntu 8.10

    Eu tb gostaria que fosse assim, mas trampando em empresa não tem como ter que se sujeitar a fazer umas coisas dessas :-/

  5. Thiago Cavalcanti says with Firefox on Ubuntu 8.10

    É por essas e outras que eu adoro ser freelancer! Posso até correr (bem) mais riscos, mas não tenho que me sujeitar a clientes Tio Patinhas…

    Sinto sua dor! :( []s!

  6. Alexsandro says with Firefox on Windows XP

    Gostei desta sequencia de post sobre “O POG nosso de cada dia”, com posts como estes da pra gente mostrar o nosso dia-a-dia de desenvolvedor onde as vezes somos submetidos a fazer POG por causa do TEMPO e CUSTO.

    Valew..

  7. Hard says with Firefox on Windows Vista

    Salve!

    So uma duvida no script acima por exemplo esta “window.open()” por que nao usar somente open()?

    Por que entre os proprios desenvolvedores JS nao usam um padrao do genero:
    “alert(), prompt() e open() ou window.alert(), window.open() e window.prompt()”?

    Muito bom o Blog Chris
    =]

  8. Chris says with Firefox on Mac Os X 10.5

    Olá Hard!

    Essa é uma boa questão, a qual eu não tenho também uma boa resposta – eu mesmo não sigo um padrão.
    E esse é o problema quando a linguagem dá abertura: se você pode fazer algo de duas formas, não tem como forçãr que se faça dessa forma apenas. É a mesma questão de usar ou não ponto-e-vírgula ao final de uma linha…

    Mas, é algo para refletir a respeito!

    []s!

  9. Chris B. – idéias e pensamentos » Qual o melhor POG até agora? says with Wordpress

    [...] #6: redirecionamento para uma url específica por javascript [...]

Leave a Reply