Fork me on GitHub
Você esta em:Home » Destaque » Magento unique TaxVat atrribute – Criando critérios de validação e formatando formulários

Magento unique TaxVat atrribute – Criando critérios de validação e formatando formulários

Saiba como validar e formatar por js os campos dos formulários no Magento e também de como tornar um campo de valor único, ou seja, campo que não se pode repetir o valor no banco como CPF e CNPJ.

Validações padrões do Magento:

Bem hoje pretendo explicar por completo sobre a validação e formatação dos campos no Magento. A validação no Magento é feita em cima das classes adicionadas aos campos, por exemplo:

<input type=”text” id=”taxvat” name=”taxvat” class=”input-text required-entry validate-email“/>

No exemplo acima colocamos a classe required-entry que informa que esse campo é obrigatório em seu Magento e o validate-email também faz a verificação de que o seu taxvat é um email. Ou seja, enguanto esse campo for vazio e enguanto não tiver um value tipo email vc não passará por essa validação! Uai isso tá errado, mas vamos abaixo consertar isso! rs

Bem o código dessa validação fica dentro do arquivo Js/prototype/validation.js

Dentro desse aquivo você encontrará as classes default do Magento:

validate-select – Valida se um dropdown é nulo
required-entry – Valida se um input text é nulo
validate-number - Valida números
validate-digits – Valida dígitos, sem espaços ou pontos.
validate-alpha – Letras (a-z or A-Z)
validate-code – Letras (a-z), números(0-9) ou underscore(_)
validate-alphanum – Letras (a-z or A-Z), números(0-9)
validate-street – Letras (a-z or A-Z), números(0-9) ou espaços e #
validate-phoneStrict – Exemplo: (123) 456-7890 or 123-456-7890
validate-phoneLax – Exemplo: (123) 456-7890 or 123-456-7890
validate-fax – Exemplo: (123) 456-7890 or 123-456-7890
validate-date – Valida datas
validate-email – Valida e-mails
validate-emailSender – Letras (a-z or A-Z), números(0-9) ou espaços
validate-password – Valida password
validate-admin-password – Valida admin password
validate-cpassword – Valida confirmação do password
validate-url – Valida URL, exige http://
validate-clean-url – Valida URL, http://www.example.com ou www.example.com
validate-identifier – Exemplo: example-page.html or anotherlevel/example-page
validate-xml-identifier – Valida identificador XML. Exemplo: something_1, block5, id-4
validate-ssn – social security number. Exemplo: 123-45-6789
validate-zip – Valida CEP. Exemplo: 90602 ou 90602-1234
validate-zip-international – Valida zip code internacional
validate-date-au – Valida datas no padrao dd/mm/yyyy
validate-currency-dollar – Exemplo: $100.00
validate-one-required – Ao menos 1 item obrigatorio
validate-one-required-by-name – Ao menos 1 item obrigatorio (Esse e o de cima é o recomendado para um grupo de radio button)
validate-not-negative-number – Apenas numeros positivos
validate-state – Valida State/Province
validate-new-password - Valida novo password
validate-greater-than-zero – Valida numero maior que zero
validate-zero-or-greater – Valida numero maior ou igual a zero
validate-cc-number – Valida número de cartão de crédito
validate-cc-type – Valida tipo de cartão de crédito
validate-cc-type-select – Valida número para tipo de cartão de crédito
validate-cc-exp – Valida data de expiração
validate-cc-cvn – Valida código de verificação
validate-data – Letras (a-z or A-Z), números(0-9) ou espaços
validate-css-length – Exemplo: 50px ou 13pt ou 15em
validate-length – Valida tamanho máximo

Veja mais em: http://inchoo.net/ecommerce/magento/programming-magento/validate-your-input-magento-style/

Criando uma nova regra de validação:

Como por exemplo adicionar uma validação do campo CPF no taxvat, bem vamos ver abaixo:

01 – Adicionando classes na mão aos objetos:

<input type=”text” id=”taxvat” name=”taxvat” class=”input-text required-entry validar-cpf“/>

<script type="text/javascript" src="<?php echo $this->getJsUrl('validacao/cpf_cnpj.js'); ?>"></script> <!-- Pega o novo arquivo de validação dentro da pasta /js/validacao/cpf_cnpj -->
<script type="text/javascript">

	Validation.add('validar_cpf',
    		'O CPF  informado \xE9 invalido',
    		function(v){
		return isCpfCnpj(v);
	});	

</script>

OBS: Uma outra forma de se chamar o JS testando se ele esta em ambiente seguro ou não seria assim:

<script type="text/javascript" src="<?php echo Mage::getURL('js', array('_secure' => true)) . 'cpfcnpj/valida.js' ?>"></script>

02 – Adicionando classes automaticamente aos objetos

<script type="text/javascript" src="<?php echo $this->getJsUrl('validacao/cpf_cnpj.js'); ?>"></script> <!-- Pega o novo arquivo de validação dentro da pasta /js/validacao/cpf_cnpj
<script type="text/javascript">
	//$('taxvat').addClassName('validar_cpf'); //basta add o ID do objeto que é taxvat
        $('<?php echo $this->getFieldId('taxvat'); ?>').addClassName('validar_cpf'); //Uma outra forma muito mais elegante
	Validation.add('validar_cpf',
    		'O CPF  informado \xE9 invalido',
    		function(v){
		return isCpfCnpj(v); //Executa a função e se tudo der certo, ou seja, se o return for true então não mostra o erro na validação
	});	

</script>

03 – Adicionando as classes e criar a validação numa tacada só:

<script type="text/javascript">
//<![CDATA[
var theForm = new VarienForm('theForm', true); //Seta o ID do form
Validation.add('nome-validacao','alerta personalizado!',function(the_field_value){ //chama função
if(the_field_value == 'baz') //testa função
{
return true; //ok o campo tem o value baz, ok retorna true
}
return false; //senão retorna false com o alerta
});

//]]>
</script>

ou seja, você decide como validar. Se não tiver muitos conhecimentos com DOM e conhece Jquery, pode-se criar uma função dentro do Jquery para testar os campos.

Criando uma validação para o cpf ou cnpj

http://blog.renanwilliam.com/tic/aprendendo-magento/adicionando-validacao-de-cpfcnpj-no-magento-1-4-2/

Criando uma validação consultando o banco de dados por Ajax:

Bem pense num cenário onde você não pode ter duplicidade de taxvat, cpf, cnpj no Magento, pois você faz promoções para os novos cadastros de 80% rs, certamente um malandro irá criar várias contas usando o mesmo CPF, CNPJ, Email, Login, Nome da Mãe……rs

Conhecido como (Magento unique TaxVat atrribute) procurei no Google e não achei nada sobre, então resolvi descrever uma lógica para tratar isso. Mas se trata apenas de um script teste, é necessário montar um módulo para realizar essa tarefa!

Existe a possibilidade de você add um ajax em sua verificação, veja:

Validation.add('validate-email', 'Please enter a valid email address. For example johndoe@domain.com.', function(v) {
var url = '/mycontroller/myValidateAction/email?email=' + encodeURIComponent(v);
var ok = false;
new Ajax.Request(url, {
method: 'get',
asynchronous: false,
onSuccess: function(transport) {
var obj = response = eval('(' + transport.responseText + ')');
validateTrueEmailMsg = obj.status_desc;
if (obj.ok === false) {
Validation.get('validate-email').error = validateTrueEmailMsg;
ok = false;
} else {
ok = true; /* return true or false */
}
},
onComplete: function() {
if ($('advice-validate-email-email')) {
$('advice-validate-email-email').remove();
}
if ($('advice-validate-email-email_address')) {
$('advice-validate-email-email_address').remove();
}
if ($('advice-validate-email-billing:email')) {
$('advice-validate-email-billing:email').remove();
}
if ($('advice-validate-email-shipping:email')) {
$('advice-validate-email-shipping:email').remove();
}
if ($('advice-validate-email-_accountemail')) {
$('advice-validate-email-_accountemail').remove();
}
}
});
return ok;
});

Veja mais em: http://inchoo.net/ecommerce/magento/magento-frontend/magento-form-field-ajax-validation/

OBS: Para entender o script acima vc precisa entender como é feito a requisição por Ajax e entender como é feito o desenvolvimento de módulos em Magento. Isso se você for fazer bonitinho como manda a dança, mas para quem quiser usar POG. Para o entendimento, abaixo irei demostrar como requisitar a uma script em php e nao à um módulo.

Explicando de outra forma:

Porque irei explicar um POG para isso? Pois nem todo mundo possui conhecimentos em desenvolvimento de módulos e com esse script dá para se ter uma boa noção de como realizar essa tarefa no Magento.

Esse script foi feito usando a busca do firstname ao invés do taxvat. O mecanismo é o mesmo basta editar só um pouquinho.

Primeiro vamos ver funcionando em:

http://www.deivison.com.br/demos/shop2/customer/account/create/

Digite o primeiro nome deivison e ele retornará que já existe usuário com esse mesmo login, no script ainda informei qual usuário esta usando.

Você também poderá testar pela url http://www.deivison.com.br/demos/shop2/unico/verifica.php?firstname=deivison

Mão na massa:

Primeiramente recomendo editar a tabela do Magento. Geralmente não recomendo mexer na tabela do Magento, mas seria necessário varios passos para ter o mesmo efeito rs.

Entre no seu banco do Magento e vá na tabela eav_attribute, lá vc verá os campos criados para uso do Magento (Obs: Não mexa e nem tente add) só faça isso que to passando rsrsr

Primeiramente a tabela:

Então no exemplo abaixo iremos tratar o campo firstname como sendo único, e essa validação abaixo ocorre por JS, onde lógicamente isso pode ser quebrado então busque na tabela eav_attribute o campo firstname e veja que a coluna is_unique (Defines Is Unique) para esse campo esta com 0, coloque 1 para forçar que esse campo seja único

Então caso queira tornar o campo taxvat como único, edite ele dessa forma! Lembre-se que após setar ele como sendo único qualquer cadastro isso será validado!

Segunda parte:

Dentro desse da página de registro em /customer/form/register.phtml coloque o script abaixo

<script type="text/javascript">

$('firstname').addClassName('unico');

Validation.add('unico','Ja existe esse usuario cadastrado!',function(the_field_value){

    var url = '<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB)?>unico/verifica.php?firstname=' + $('firstname').value;
    var ok = false;
    new Ajax.Request(url, {
        method: 'get',
        asynchronous: false,
        onSuccess: function(transport) {
            var obj = response = transport.responseText;
            //alert (obj);
            unico = obj.status_desc;
            if (obj) {
                Validation.get('unico').error = obj + ' ja usa esse login!';
                ok = false;
            } else {
                ok = true;
            }
        }
    });
    return ok;

});

</script>
view raw
unique-taxvat-parte01.phtml
This Gist is brought to you using Github.

https://gist.github.com/4073097

Na raiz do Magento criei uma pasta chamada unico que contém um arquivo chamado verifica.php. Esse arquivo recebe o GET e verifica no banco se tem outro usuário usando ele o mesmo firstname.

<?php
include_once '../app/Mage.php';
Mage::app();


      $compara = $_GET['firstname'];
      $cli = Mage::getModel('customer/customer')
      ->getCollection()
      ->addAttributeToFilter('firstname', array('eq' => $compara));

      //exclui do filtro o seu cpf, apra caso queira editar o cpf (É necessário mexer mais nisso para que na hora da edição ele não sete um cpf de outra pessoa)
      //->addFieldToFilter('customer_firstname', array('neq' => $compara));
      $flag=0;
      foreach ($cli as $customer) {
           $dataid=$customer->getId();
           if ($dataid != $compara) //if the value is from another customer_id
              $flag |= 1; //we found a dup value
      }

      if ($flag) {
          echo $_GET['firstname'];
      }

return true

?>
view raw
verifica.php
This Gist is brought to you using Github.

https://gist.github.com/4073134

Pronto!

Obs: Não recomendo utilizar esse script dessa forma que as coloquei aqui! Monte um módulo para realizar essa tarefa, larga de ser descansado pô! rsrsrs

Vlw espero ter contribuido!

Referencias:

  • http://inchoo.net/ecommerce/magento/programming-magento/validate-your-input-magento-style/
  • http://inchoo.net/ecommerce/magento/magento-frontend/magento-form-field-ajax-validation/
  • http://inchoo.net/ecommerce/magento/magento-custom-model-with-custom-validation-rules/
  • https://github.com/atetlaw/Really-Easy-Field-Validation
  • http://blog.renanwilliam.com/tic/aprendendo-magento/adicionando-validacao-de-cpfcnpj-no-magento-1-4-2/
  • http://stackoverflow.com/questions/9384485/magento-unique-taxvat-atrribute-for-every-customer
  • http://jagdeepbanga.com/blog/magento-get-base-url-skin-url-media-url-js-url-store-url-and-current-url.html
  • http://fishpig.co.uk/blog/addattributetofilter-conditionals-in-magento.html
  • http://prototypejs.org/learn/introduction-to-ajax

Sobre o Autor

Designer, Web Developer & Linux Administrator

Meu nome é Deivison Arthur, tenho 29 anos, sou Administrador Linux, Analista de Sistema, Webdesigner e Pesquisador. há mais de dez anos. Nasci no Rio de Janeiro, atualmente trabalho como Gerente de Tecnologia e E-commerce at Grupo FFernandes e Freelancer nas horas vagas. Desenvolvimento em Joomla, Wordpress, Drupal, Magento e outros GPLs...

Quantidade de Artigos : 114

Enviar Comentário

© 2012 Powered By Wordpress, Deivison Arthur

Ir para cima