DGmike

DGmike

Calma! não entre em pânico! Amanhã (talvez) tem novo post…

  • Alice Andrade
  • Rafael Zamana
Você está aqui: dgmike » Arquivos para javascript

  • Home
  • Guia Rápido jQuery
  • Códigos prontos
    • PHP: Função __auloload()
    • Classe sqlsimples e sql – PHP
    • Bancos, bancos e mais bancos…
  • PagSeguro
  • Artigos
    • JavaScript (parte 1)
  • Quem é dgmike?

CodeShow: cobras versionadas

Posted in Dia-a-dia by DGmike
May 26 2010
TrackBack Address.
Este post possui um microformato do tipo hCalendar Amanhã a humilde empresa onde trabalho irá realizar um evento… não “um evento”, mas “o evento”. O CodeShow é o evento mais esperado por amantes de desenvolvimento de websites – designers ou programadores. Eles verão as cobras do desenvolvimento criando uma aplicação web ao vivo. O evento acontecerá aqui no espaço Apas, R. Pio XI, 1200 São Paulo, SP BRA. Facinho de chegar.
Python, linguagem dos feras!

Sim, python é um tipo de cobra e também o nome de uma linguagem de programação muito poderosa.

Para quem não sabe, o CodeShow teve sua primeira versão em 2007, quando eu ainda não era funcionário da #visie. Lá, o Diego Eis e o Elcio Ferreira mostraram como fazer um aplicativo web2.0, uma biblioteca online.

Este ano, faremos o novo campus online (diga-se de passagem que o campus online foi o meu segundo projeto em python[bb]) com recursos de programação e desenvolvimento ágil. Falaremos como é a parceria entre designer e programador, como é trabalhar em equipe, o que fazer para não ter dores de cabeça. Tudo mostrando, ao vivo, como uma aplicação deve ser montada e publicada.

Funcionará assim: teremos o inicio do projeto, mostrando como a aplicação deve ficar, exibiremos as ferramentas que serão usadas: Git, HTML5, web2py e MongoDB entre outras. Depois faremos uma pausa e iremos para o coffe break – a melhor parte. Conselho: faça um bom networking. Eu entrei na empresa logo após o primeiro CodeShow. Se quiser, vamos bater um papo sobre PHP[bb], Padrões de codificação, python, html5, pagseguro ou é claro, sobre os episódios clássicos do chaves/chapolin. (“Pepe! Já tirei a vela!”).

Logo após o coffe, os programadores irão para uma sala e os designers para outra. Pergunta: Posso estar nas duas salas ao mesmo tempo? Acho que não, mas tente… talvez a força esteja com você. Lá teremos o desenvolvimento em si. Como teremos programadores em apenas uma sala, poderemos não nos importar com termos técnicos que normalmente designers não entenderiam, como “pedra, papel, tesoura, lagarto, spock“.

No final do dia, iremos juntar as duas “equipes” para finalizar o projeto. E então enviar por ftp para o servidor publicar o novo campus online. O evento é um apoio do PagSeguro e demonstraremos, na prática, como implementar essa ferramenta usando python.

No twitter

Para quem quiser, pode acompanhar a hashtag #codeshow para saber o que está acontecendo no evento. Se quiser, fique à vontade para me seguir.

    No Comments yet »
    Tagged as: banco de dados, codeshow, Design, evento, eventos, javascript, Programação, python, Tecnologia, trampo, twitter, visie, web

    O PagSeguro mudou a URL de retorno automático, e agora?

    Posted in Chrome, Cotidiano, Firefox, Internet Explorer, Navegadores, Programação, Semântica, Tecnologia, Trabalho, Tutorial, eventos, jQuery, javascript, pagseguro, php, plugin, python, yui by DGmike
    Nov 02 2009
    TrackBack Address.

    Nesta sexta-feira, dia 30 de outubro, o PagSeguro mudou a sua homepage e com ela muitas coisas novas aconteceram. Inclusive rolou uma palestra para 70 pessoas do twitter que acompanharam as mudanças do Twitter. A palestra foi ministrada pelo Dennis Ferreira e pela Valéria Santos. Pessoas que tive a oportunidade de conhecer de perto e eles são pessoas responsáveis e estão conscientes das mudanças e do impacto que esta mudança causa.

    PagSeguro - Uma empresa UOL

    PagSeguro - Uma empresa UOL

    Tem bastante gente falando sobre as novidades do novo site do PagSeguro por aí, então se quiser saber o que exatamente, recomendo os slides da palestra e uma busca no oráculo.

    Mas, e na parte de códigos? O que muda? Você precisa atualizar seus códigos para essa nova plataforma? A resposta é simples e óbvia: NADA. Sim você não precisa atualizar seu código correndo achando que sua URL mudou. O PagSeguro deixou de ser implementado em ASP e passou a ser implementado em JAVA, o que deixou a aplicação muito mais robusta e segura, com isso a URL do retorno automático mudou. No site do PagSeguro eles indicam uma nova URL para o retorno automático ( https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml ) mas a URL anterior continua funcionando normalmente e continuará por um longo tempo.

    O pessoal do PagSeguro fez todas as alterações no seu sistema e antes de por no ar fez uma longa bateria de testes e só foi para o ar após verificar se todas as bibliotecas oficiais continuavam funcionando normalmente. Então, as URL de retorno automático continuará funcionando normalmente. Com o passar do tempo, é óbvio que a URL anterior morra, mas isso acontecerá muito tempo depois, até perceberem que ninguém mais utiliza a URL antiga.

    A mudança vai ser longa e sutil, com o tempo iremos alterar todos os scripts para a nova URL, mas você não precisa sair desesperado para trocar suas URLs. O PagSeguro pensou bem nisso quando alterou a url de retorno automático. Eu mesmo fiz testes hoje de tarde para comprovar isso, já que recebi algumas dúvidas de alguns clientes e algumas pessoas reclamaram disso no twitter. Portanto, não se preocupe, você não precisa alterar nada no seu script de retorno automático do PagSeguro.

    8 Comments »
    Tagged as: Code, código, integração, javascript, novo pagseguro, pagseguro, php, python, rails, retorno automático, RoR, ruby on rails, Tecnologia, url

    Função clone da jQuery e atributo name para IE

    Posted in Internet Explorer, Windows, cases, html, jQuery, javascript, plugin, xHTML by DGmike
    May 25 2009
    TrackBack Address.

    Aqui na ACSP, onde estamos desenvolvendo um mega-hiper-ultra-plus-and-is-the-maximun-software-of-the-solar-system sistema ultra-secreto nos deparamos com um problema cabuloso no Browser azul até a versão 7. A idéia é a seguinte: quando um usuário clicar em um determinado botão “adicionar uma cópia” do formulário ele deve copiar o fieldset anterior e colá-lo abaixo do mesmo. Obviamente, devemos alterar o name dos campos para conseguir tratá-los no PHP no server-side. Atente a este ponto, todas as ações aplicadas aos campos devem continuar funcionando, ou seja, se você aplicou um “click”, “change” “blur” ou seja lá o que for, deve continuar funcionando normalmente. Ah sim, vamos utilizar a biblioteca “coisinha bonitinha do papai” jQuery[bb].

    JavaScript - Mais uma dica para você

    JavaScript - Mais uma dica para você

    A melhor forma de resolver esse problema é pensar antes de escrever o código. Mas algumas vezes não conseguimos prever coisas que nem a Microsoft[bb] explica. Então o ideal é fazer uma função que aplique as ações ao formulário assim, podemos usar um template para fazer o clone.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    $(function(){
      aplica_acoes();
      $('button.duplicar').click('duplica_fieldset');
    });
     
    function duplica_fieldset() {
      $('fieldset:last').after ('------------ cole aqui o template -----------');
      aplica_acoes();
    }
     
    function aplica_acoes() {
      $('.campo').click(function (){alert("Hey! Ho!");});
    }

    O problema disso é ao alterarmos qualquer campo teriamos que alterar o javascript para que o template fique exatamente igual. Outro problema é que ao chamarmos a função aplica_funcoes ele adicionará duas vezes a ação click no campo.

    Mas vamos por partes, primeiro o problema do click duplicado. Podemos resolver isso sem problema algum. Basta usar o unbind e bind.

    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    function aplica_funcoes() {
      $('.campo')
        .unbind('click', heyho)
        .bind('click', heyho);
    }
     
    function heyho() {
      alert("Hey! Ho!");
    }

    Legal, o que isso faz é remover os eventos click e recoloca-os. Muito bem, também poderiamos usar o live, adicionado na jQuery desde a versão 1.3.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    $(function(){
      aplica_acoes();
      $('button.duplicar').click('duplica_fieldset');
    });
     
    function duplica_fieldset() {
      $('fieldset:last').after ('------------ cole aqui o template -----------');
    }
     
    function aplica_funcoes() {
      $('.campo').live('click', heyho);
    }
     
    function heyho() {
      alert("Hey! Ho!");
    }

    Assim, todos os campos que forem criados após essa chamada do live, todas as vezes que um elemento com a classe .campo for criado ele já nascerá com a ação click.

    Muy biem, compañeros! Vamos ao próximo problema. O template que não deve ficar aqui no javascript e sim clonar o dito cujo. Para isso vamos usar o método clone da jQuery, assim ele copiará o código escrito no próprio html, assim não precisamos dar manutenção no código duas vezes. Veja como é simples usar o clone.

    6
    7
    8
    9
    
    function duplica_fieldset() {
      var fls = $('fieldset:last').clone();
      $('fieldset:last').after (fls);
    }

    Ok, com isso já podemos copiar um fieldset e colar logo abaixo do outro fieldset. Uma coisa muito interessante é que podemos passar o parametro true dentro do clone, assim ele já copia os eventos, fazendo essa alteração nosso script ficará mais ou menos assim (perceba como diminui a quantidade de código).

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    $(function(){
      aplica_acoes();
      $('button.duplicar').click('duplica_fieldset');
    });
     
    function duplica_fieldset() {
      var fls = $('fieldset:last').clone(true);
      $('fieldset:last').after (fls);
    }
     
    function aplica_funcoes() {
      $('.campo').click(function(){alert("Hey! Ho!");});
    }

    E o name?

    Agora, vamos ao problema maior, vamos alterar o name para podermos trabalhar no server-side. Tomemos o seguinte template de html:

    1
    2
    3
    4
    5
    
    <fieldset>
       <label for="nome_123">Nome <input type="text" name="nome_123" id="nome_123" /></label>
       <label for="campo_123">Nome <input type="text" name="campo_123" id="campo_123" class="campo" /></label>
    </fieldset>
    <button class="duplicar">Nova Assinatura</button>

    Perceba que usamos o padrão “123″ em todos os campos, seria o nosso ID temporário para podermos tratar sem problemas no server-side. Então, para alterar o campo deveriamos criar um número aleatório único e alterar via comando attr da jQuery. Algo como isto:

    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    function duplica_fieldset() {
      var num = ''+(new Date().getTime())+(parseInt(Math.random()*100));
      var fls = $('fieldset:last').clone(true);
      $('[name]', fls).each(function(){
        var lastName = this.name;
        var base = lastName.split('_')[0];
        var newName = base+'_'+num;
        this.name=newName;
      });
      $('fieldset:last').after (fls);
    }

    Veja, para criar um número aleatório único usei o getTime do objeto Date, assim pegamos os microsegundos que aconteceram naquele momento, um momento único que não se repetirá. E então adicionamos a um número aleatório qualquer. O Math.random() gera um número aleatório entre zero e um, então é necessário multiplicá-lo com um valor multiplo de dez para termos o inteiro desejado. Então usamos o parseInt para converter esse float maluco para inteiro e obtermos apenas o desejado. Perceba que no inicio dessa linha adicionamos uma string vazia, isso para que os dois valores não sejam somados e sim concatenados.

    Veja, que logo após chamamos todos os campos que tenham o campo name, isso apenas no nosso fls, clonado anteriormente. Podemos fazer isso com todos os atributos (id, for, class, etc). Aconselho a fazer um each só para não deixar sua aplicação lenta.

    Tá, mas qual é o problema com o Internet Explorer?

    Tudo bem? Tudo funcionando perfeitamente? Tudo tranquilo? Sim, com apenas um problema. No Internet Explorer. Até a versão sete esse problema existia, mas na versão oito o problema foi corrigido. O problema é o seguinte: EM RADIO BUTTONS E CHECKBOXES O NAME NÃO PODE SER ALTERADO DINAMICAMENTE VIA JAVSCRIPT! Aí já viu, né? Eles (os desenvolvedores do Internet Explorer) devem ter feito isso por que se alterar o name destes tipos de campos acabará com o grupo já instituido.

    Então, o nosso código funciona perfeitamente em browsers. Então aquela história de escrever o template no JavaScript[bb] é a forma de resolver. Sim, é uma forma, o problema é que algumas vezes só nos deparamos com problemas quando a tela já está cheia de detalhes. Então o que temos que fazer é tentar resolver de outra forma, mais simples.

    Vendo o código-fonte da jQuery, percebi que a função clone já faz um hack para IE, devido à forma como o dito cujo faz cópia com o comando cloneNode. Usando o método cloneNode do DOM, o Browser da Microsoft faz um clone dos eventos, então, se você remover o evento de um, ele remove o evento de todos ao mesmo tempo. Veja o trecho onde o clone é definido na jQuery.

    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    
    	clone: function( events ) {
    		// Do the clone
    		var ret = this.map(function(){
    			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
    				// IE copies events bound via attachEvent when
    				// using cloneNode. Calling detachEvent on the
    				// clone will also remove the events from the orignal
    				// In order to get around this, we use innerHTML.
    				// Unfortunately, this means some modifications to
    				// attributes in IE that are actually only stored
    				// as properties will not be copied (such as the
    				// the name attribute on an input).
    				var html = this.outerHTML;
    				if ( !html ) {
    					var div = this.ownerDocument.createElement("div");
    					div.appendChild( this.cloneNode(true) );
    					html = div.innerHTML;
    				}
     
    				return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
    			} else
    				return this.cloneNode(true);
    		});
    		// Copy the events from the original to the clone
    		if ( events === true ) {
    			var orig = this.find("*").andSelf(), i = 0;
     
    			ret.find("*").andSelf().each(function(){
    				if ( this.nodeName !== orig[i].nodeName )
    					return;
     
    				var events = jQuery.data( orig[i], "events" );
     
    				for ( var type in events ) {
    					for ( var handler in events[ type ] ) {
    						jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
    					}
    				}
     
    				i++;
    			});
    		}
     
    		// Return the cloned set
    		return ret;
              },

    Bom, já que ele já hackeia, decidi fazer um plugin que seja igual ao clone só que interferindo nesse hack. Eis o código final.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    /**
     * Extensão para jQuery clonar um elemento para corrigir o BUG do IE
     */
     
    $.fn.clonar = function( events , manipulateForIE) {
    // Do the clone
    var ret = this.map(function(){
      if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
        var html = this.outerHTML;
        if ( !html ) {
          var div = this.ownerDocument.createElement("div");
          div.appendChild( this.cloneNode(true) );
          html = div.innerHTML;
        }
        // Isto foi adicionado à função de clonar
        if (manipulateForIE != undefined && $.isFunction(manipulateForIE))
          html=manipulateForIE(html)
     
        return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
      } else
        return this.cloneNode(true);
    });
    // Copy the events from the original to the clone
    if ( events === true ) {
      var orig = this.find("*").andSelf(), i = 0;
      ret.find("*").andSelf().each(function(){
        if ( this.nodeName !== orig[i].nodeName ) return;
        var events = jQuery.data( orig[i], "events" );
        for ( var type in events )
          for ( var handler in events[ type ] )
            jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
        i++;
      });
    }
    // Return the cloned set
    return ret;
    }

    Daí, basta passar uma função que interfirirá no meio do clone da jQuery clonar. O código deve ficar assim:

    8
    9
    10
    
    var fls=$('fieldset.'+classe+':last').clonar(true, function(html){
      return html.replace(/name="?(\w+)_\d+/ig, 'name="$1_'+r+'" ');
    });

    E este é o nosso código final, já com o plugin e tudo o que tem direito:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    
    $(function(){
      aplica_acoes();
      $('button.duplicar').click('duplica_fieldset');
    });
     
    function duplica_fieldset() {
      var fls = $('fieldset.'+classe+':last').clonar(true, function(html){
        return html.replace(/name="?(\w+)_\d+/ig, 'name="$1_'+r+'" ');
      });
      $('fieldset:last').after (fls);
    }
     
    function aplica_funcoes() {
      $('.campo').click(function(){alert("Hey! Ho!");});
    }
     
    /**
     * Extensão para jQuery clonar um elemento para corrigir o BUG do IE
     */
     
    $.fn.clonar = function( events , manipulateForIE) {
    // Do the clone
    var ret = this.map(function(){
      if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
        var html = this.outerHTML;
        if ( !html ) {
          var div = this.ownerDocument.createElement("div");
          div.appendChild( this.cloneNode(true) );
          html = div.innerHTML;
        }
        // Isto foi adicionado à função de clonar
        if (manipulateForIE != undefined && $.isFunction(manipulateForIE))
          html=manipulateForIE(html)
     
        return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
      } else
        return this.cloneNode(true);
    });
    // Copy the events from the original to the clone
    if ( events === true ) {
      var orig = this.find("*").andSelf(), i = 0;
      ret.find("*").andSelf().each(function(){
        if ( this.nodeName !== orig[i].nodeName ) return;
        var events = jQuery.data( orig[i], "events" );
        for ( var type in events )
          for ( var handler in events[ type ] )
            jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
        i++;
      });
    }
    // Return the cloned set
    return ret;
    }

    Uma vez o professor me disse: “Não tenha medo do código.” E isso eu passo para todo mundo que eu converso. Como você pode ver, o código da jQuery é bem escrito e bem documentado, pare e leia alguma coisa para você aprender cada vez mais. Ah, e caso você precise de um lugar de consulta para o dia-a-dia você pode usar o JavaScript Cheat Sheet.

    JavaScript Cheat Sheet

    JavaScript Cheat Sheet

    7 Comments »
    Tagged as: browser, BUG internet explorer, campo, checkbox, DOM, Firefox, input, Internet Explorer, javascript, jQuery, Microsoft, plugin, radio

    Loja PagSeguro usando JavaScript

    Posted in Chrome, Firefox, Internet Explorer, Programação, Tutorial, javascript, pagseguro, xHTML by DGmike
    Feb 17 2009
    TrackBack Address.

    Olá pessoal!!! :D

    Bem, eu sei, tenho andado muito sumido por aqui. São muitos projetos e muitas aulas para lecionar. Engano de quem pensa que isso é ruim. Pelo contrário. Ontem um aluno meu me disse o seguinte: “em plena crise global você está com tantos projetos, isso é bom”

    Anyway. Tenho trabalhado muito com o sistema de pagamento PagSeguro e minhas impressões sobre essa incrível ferramenta são muito positivas. Hoje fiquei pensando. “Pô, o PagSeguro é tão simples de trabalhar, nem prescisa de um sistema em PHP/Python/Ruby on Rails/.Net/Java/C++/Perl/etc. Na verdade é possivel resolver o problema apenas com JavaScript.”

    Então com café e biscoito “na ideia” (ideia agora não tem mais acento, argh!) resolvi tentar resolver o problema criando uma biblioteca na qual designers consigam criar sua própria loja de forma simples e dinâmica tendo apenas que configurar com seus dados e informar seus produtos separados por categorias. O resultado você pode conferir na minha lojinha de demonstração.

    A configuração não é um bicho de sete cabeças. Ao baixar o arquivo .zip você receberá cinco arquivo e uma pasta. Eis a estrutura:

    index.html - Arquivo onde roda sua loja
    configuracoes.js - Arquivo de suas configurações junto ao pagseguro. Como o e-mail, tipo de frete, imagem do botão, etc
    loja.js - Seus produtos estarão listados aqui
    pagseguro.js - Enfim a biblioteca que faz tudo funcionar :D
    style.css - Apenas o CSS que dará um gás na sua loja
    imagem/ - Pasta onde ficarão as imagens dos produtos

    Agora, como diria o Jack: vamos por partes.

    configuracao.js

    Nesse arquivo você deve colocar as configurações de sua conta e do seu carrinho PagSeguro. A principal configuração é o seu e-mail. O mesmo e-mail que você cadastrou-se no pagseguro.

    1
    2
    3
    
    configuracoes = {
    email       : 'INFORME SEU E-MAIL CADATRADO NO PAGSEGURO',
    moeda       : 'BRL', // Atualmente o PagSeguro só suporta (BRL) Brasil - Real

    Deixei para você decidir qual será a moeda usada porque não vai que um dia o PagSeguro trabalha com Dolar, né? Então a configuração já está lá e funcionando, só que se você passar outro valor, o PagSeguro mandará um erro para seu cliente, e nós não queremos isso, né?

    As configurações sobre o frete são opcionais e devem atuar com o sua configuração no admin do PagSeguro. Se você quiser que seja um frete único para todos os itens você deve passar a informação aqui.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    // Configurações sobre o frete
    tipofrete   : 'EN', // Se esta opção for definida (é opcional),
    // use frete nas configurações para frete unico por
    // item ou um tipo de frete para cada produto
    //
    // Aqui você deverá informar EN para PAC ou SD para Sedex
    // Não se esqueça de definir suas opções no seu Admin do PagSeguro
    frete       : 2,
    peso        : 2, // Sim, ele aceita float 2.4 e inteiro, a biblioteca já converte pra voce em 240 ou 200 :D

    * nota: quando digo um frete único quero dizer que os correios irão cobrar um valor único para cada item então, se a pessoa te pede dois itens (do mesmo produto ou não) esse valor será multiplicado por dois.

    A próxima configuração será onde deverão atuar cada área da sua loja. Passe os IDs que você achar melhor. O legal é que você pode escrever o HTML como desejar que a biblioteca colocará cada parte em seu determinado lugar.

    1
    2
    3
    4
    
    // Abaixo, coloque as referencias aos seus elementos do HTML
    id_menu     : 'menu',
    id_main     : 'main',
    id_carrinho : 'carrinho',

    Agora, com relação às imagens de cada produto. Cada produto deverá ter um código identificador (ou id), um para cada tipo de produto, logo uma câmera fotográfica deverá ter um id diferente de câmera fotografica digital. Se você setar esse valor como true, a biblioteca irá procurar por imagens na pasta imagem da seguinte forma: [codigo_de_identificacao].[extensao]

    Logo, você pode definir a extensão que suas imagens terão, pode ser gif, bmp, jpg, jpeg, png, fique à vontade. O único problema é que todas as imagens devem ter a mesma extensão.

    1
    2
    3
    4
    5
    
    // Gostaria de inserir imagens aos seus itens.
    // Os arquivos devem estar dentro da pasta imagem
    // no formato [id].[formatoimg]
    imagem      : true,
    formatoimg  : 'jpg',

    Botão de compra, você pode adicionar qualquer imagem nesta parte, já deixei preparado para você as imagens padrão do PagSeguro. Aconselho a usar essas imagens porque elas estão no PagSeguro, se acontecer de o PagSeguro estar offline o usuário verá uma imagem de erro e saberá que não conseguirá efetuar a compra por qualquer que seja o motivo.

    1
    2
    3
    4
    5
    
    // Endereço do botão de compra
    //imgBotao    : 'https://pagseguro.uol.com.br/Security/Imagens/btnComprarBR.jpg',
    //imgBotao    : 'https://pagseguro.uol.com.br/Security/Imagens/btnConcluirBR.jpg',
    imgBotao    : 'https://pagseguro.uol.com.br/Security/Imagens/btnFinalizar.jpg',
    //imgBotao    : 'https://pagseguro.uol.com.br/Security/Imagens/btnConcluir.jpg',

    Para escolher o botão basta descomentar a linha e comentar a linha descomentada.

    E, por último, configure a categoria que aparecerá ao abrir a página, ou seja, a home de sua loja. Você verá mais par frente que você separa seus produtos por categoria. O nome da categoria deve ser exatamente igual ao nome da categoria que você informou. Isso quer dizer que “MAIÚSCULAS” é diferente de “maiúsculas” ok ;D

    1
    2
    3
    4
    
    // Abaixo, informe o primeiro grupo a ser mostrado na loja
    // Não se esqueça! Este valor é case-sensitive, ou seja Maiúsculas é diferente de MAIÚSCULAS
    inicio     : 'Bebê'
    }

    * Nota: O padrão do javascript é aceitar que você coloque virgulas no último item de um objeto (nosso objeto de configuração por exemplo), mas o internet explorer acha que isso é um BUG, quebrando assim o script :( então a última configuração deverá estar sem a vírgula.

    loja.js

    Ah sim! Os produtos. Esses não tem mistério nenhum. Você deve trabalhar com o formato JSON para criar os seus elementos. Mas vamos devagar, você aprenderá como é facil configurar sua loja.

    Primeiro, definimos a nossa loja:

    1
    2
    3
    
    loja = {
     
    }

    Com isto já temos uma loja e podemos adicionar categorias.

    1
    2
    3
    4
    5
    
    loja = {
    'Bebê': [],
    'Eletro-portáteis': [],
    'Câmeras digitais': []
    }

    E para cada elemento, você deve seguir o modelo, mas preste atenção do BUG do Internet explorer: não coloque vírgula no último item do objeto. Para fazer a sua loja iniciar com uma determinada categoria aberta, coloque o nome dessa categoria no arquivo configurações, mas lembre-se! “Mamãe” é diferente de “mamãe” que é diferente de “Mamae” ;D

    Agora, os produtos. Para cada categoria você deve colocar seus produtos, então vamos adicionar dois produtos ao nosso objeto.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    loja = {
    'Bebê': [
    {
    'id'    : '00001',
    'descr' : 'Chupeta doce',
    'valor' : 3.4
    },
    {
    'id'    : '00002',
    'descr' : 'Chupeta salgada',
    'valor' : 4.8
    },
    {
    'id'    : 'A12MF5',
    'descr' : 'Chupeta amarga',
    'valor' : 4
    }
    ],
    'Eletro-portáteis': [],
    'Câmeras digitais': []
    }

    E pronto! Sua loja está montada coloque quantos produtos você achar conveniente. Lembre-se, que nesta parte você também não pode colocar virgula no último elemento, já que o Internet Explorer implica com isso.

    Se você definiu, nas suas configurações, a biblioteca deverá produrar por imagens no formato PNG você deverá ter as seguintes imagens na sua pasta imagem: 00001.png, 00002.png e A12MF5.png

    Para cada item você pode passar um valor de frete e valor de peso, mas se você passar para um, deve passar para todos.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    loja = {
    'Bebê': [
    {
    'id'    : '00001',
    'descr' : 'Chupeta doce',
    'valor' : 3.4,
    'peso' : 0.53,
    'frete' : 4.3
    },
    {
    'id'    : '00002',
    'descr' : 'Chupeta salgada',
    'valor' : 4.8,
    'peso' : 0.7,
    'frete' : 5
    }
    ]
    }

    Você também deve fazer a configuração no arquivo de configurações do tipo de frete. Se você definir o valor de frete único nas suas configurações a biblioteca irá ignorar os valores de frete e passará a atuar com frete único.

    Obviamente, esta biblioteca trabalha com o tipo “Carrinho Próprio” já que no “Carinho PagSeguro Brasileiro” não podemos enviar mais de um produto de vez, mas não se preocupe, isso não quer dizer que você tem que tratar retorno automático e etc. Ah, sim, não se esqueça de cobrar pelo frete :D seja ele por peso ou por valor de frete fixo.

    Agora que você já tem sua loja funcional, use sua criatividade para criar um belo layout e comece hoje mesmo a lucrar com sua loja PagSeguro. Quem quiser, pode inclusive colocar o link de suas criadas com esta biblioteca para ver qual é a melhor. :D Abraços!

    A biblioteca foi montada em menos de um dia de trabalho, logo, podemos ver como o sistema de pagamento nos permite que trabalhemos de forma rápida e simples. Como se não bastasse, em apenas um dia foi possivel criar uma loja completa e funcional com direito a pagamento via boleto, cartões de crétido, débito em conta e tudo o que tem direito.

    21 Comments »
    Tagged as: biblioteca, biblioteca em javascript, javascript, loja, pagseguro

    AJAX: anotações diversas

    Posted in jQuery, javascript, php by DGmike
    Oct 08 2008
    TrackBack Address.

    Navegando pela internet me deparei com vários plugins, extensões, scripts que trabalham com ajax. Mantenho sempre meus feeds marcados como não lidao para utilizar depois, mas percebi que a lista de não lidos estava ficando um pouco grande, então resolvi escrever este memo para registrar bons scripts que podem ser usados em um futuro distante (ou não).

    Várias ferramentas em javascript para você poder usar no seu site/blog/sistema

    Várias ferramentas em javascript para você poder usar no seu site/blog/sistema

    Tree View para jQuery

    Emular um sistema de arvores como o que o windows explorer tem é uma tarefa um pouco complicada se formos parar para colocar imagens diferentes para cada estado (pasta aberta ou não), se quisermos aplicar uma animação a cada ação ou mesmo se quisermos que ela seja dinâmica, atualizando os eventos de cada elemento atomaticamente. Como jQuery é minha biblioteca favorita, este plugin resolve este problema e os mais comuns relacionados a arvores.

    Você pode ver vários exemplos de formas de customização no próprio site do desenvolvedor.

    Se você pretende fazer uma aplicação com opções, este plugin resolve um de seus problemas.

    Se você pretende fazer uma aplicação com opções, este plugin resolve um de seus problemas.

    Time Picker (Experimental)

    Um gosto muito de projetos experimentais porque eles podem nos dar uma breve visão de como vão ser os projetos em um futuro próximo. Este projeto é um selecionador de horas – um plugin para jQuery, que trabalha de uma forma diferente, você vai selecionando por partes as horas, minutos e duração (am ou pm). O legal é que é intuitivo e não é necessário ficar clicando em botões desnecessários, só no que realmente é necessário. Bom, fica a dica, mas lembre-se: é um projeto experimental, só use se seus usuários forem cabeça aberta…

    Para utilizar este plugin, mais que uma linha de código não é necessário, e você ainda tem uma série de opções para customizar seu novo “relógio”. Confira na página do projeto.

    Não gaste seu mouse clicando várias vezes para definir a hora. É o que propõe este script experimental

    Não gaste seu mouse clicando várias vezes para definir a hora. É o que propõe este script experimental

    jCrop

    Tá aí a solução para nossos problemas! Que tal criar um sisteminha de upload onde o usuário escolhe qual área da foto ele quer usar no site? Complicado, né? Criar uma div para fazer a area a ser cortada, criar um outro que manipule cada área de onde o elemento será cortado. Dependendo da área, o cursos do mouse deve ser alterado. Sim, é complicado fazer isso. Ainda mais porque tem que interagir com o servidor (aliás, quem vai cortar na verdade é o servidor e não o javascript) e escrever uma função que use a biblioteca GD se for em PHP. Se ainda achou fácil, que tal definir um tamanho mímino para a imagem ou proporção ou mesmo criar uma prévia de como vai ficar depois de pronto?

    Para resolver todos esses pontos, existe um plugin para jQuery chamado jCrop que faz o crop com maestria, ele já vem com um script em PHP de exemplo que você pode usar sem problemas para implementar. Eu já usei e aprovo este plugin, o cliente ficou muito satisfeito e queria até implementar em outras áreas.

    Cortar imagens no Browser do usuário se tornou uma tarefa fácil

    Cortar imagens no Browser do usuário se tornou uma tarefa fácil

    Tem muita coisa legal chegando nos meus feeds, mas muita coisa sem nexo também, então para quem quiser acompanhar o que eu leio sobre ajax, pode assinar meu feed de Categoria Ajax, assim eu filtro, pessoalmente, o que é bom para seus ouvidos. :D

    4 Comments »
    Tagged as: ajax, crop, date, feed, ferramentas, image, javascript, jcrop, jQuery, php, plugin, rss, script, time, tree
    Next page »

    Categorias

    • Amigos  (16)
    • cases  (4)
    • Cotidiano  (73)
    • CSS  (20)
    • Design  (2)
    • Dia-a-dia  (33)
    • Diversão  (18)
    • eventos  (10)
    • extensions  (11)
    • flash  (4)
    • Games  (1)
    • html  (7)
    • icephp  (4)
    • Ilustração  (6)
    • Imagem  (8)
    • Inspiração  (5)
    • javascript  (36)
      • jQuery  (7)
      • yui  (2)
    • Não categorizado  (26)
    • Navegadores  (19)
      • Chrome  (6)
      • Firefox  (18)
      • Internet Explorer  (6)
    • pagseguro  (12)
    • php  (43)
      • PHP Conference  (3)
    • plugin  (3)
    • Programação  (46)
    • python  (5)
    • Semântica  (16)
    • sql  (9)
    • tableless  (18)
    • Tecnologia  (48)
    • Trabalho  (28)
    • Tutorial  (25)
    • Vetorial  (5)
    • video  (8)
    • video-tutorial  (5)
    • Windows  (4)
    • wordpress  (2)
    • xHTML  (23)

    Tags

    ajax artigo banco de dados biblioteca blog browser classe CSS data Design Dia-a-dia dinheiro evento eventos Firefox framework google html icephp internet Internet Explorer javascript jQuery loja mysql online opera pagseguro palestra php plugin Programação python retorno automático simples site solução sql tableless Tecnologia Tutorial twitter visie web wordpress

    Arquivo

    SlideSare

    Últimos Posts

    • Vírgula em html5 e css3
    • Youtube e HTML5, agora ficou mais fácil
    • Novo emprego!
    • Até mais e obrigado pela salada
    • Api de teste do meadiciona.com

    Tags

    ajax artigo banco de dados biblioteca blog browser classe CSS data Design Dia-a-dia dinheiro evento eventos Firefox framework google html icephp internet Internet Explorer javascript jQuery loja mysql online opera pagseguro palestra php plugin Programação python retorno automático simples site solução sql tableless Tecnologia Tutorial twitter visie web wordpress

    Conteúdo

    • Artigos
      • JavaScript (parte 1)
    • Códigos prontos
      • Bancos, bancos e mais bancos…
      • Classe sqlsimples e sql – PHP
      • PHP: Função __auloload()
    • Guia Rápido jQuery
    • PagSeguro
    • Quem é dgmike?
    PagSeguro Powered by WordPress | “Blend” from Spectacu.la WP Themes Club