Estou compartilhando uma função que escrevi agora há pouco para validar datas em flash. O detalhe é que, por enquanto, o ano deve ter 4 dígitos. Por exemplo: 02/10/2010. Segue:
1 2 3 4 5 6 7 8 9 10 11 12 13 | trace(validateDate('02/10/2010', "/")); function validateDate(s, delimitador: String):Boolean { var d:Array = s.split(delimitador); if (d.length!=3) return false; for (var i:Number = 0; i<d.length; i++) d[i] = parseInt(d[i]); d[1] = d[1]-1; var dt:Date = new Date(d[2], d[1], d[0]); return ((dt.getFullYear()==d[2]) && (dt.getMonth()==d[1]) && (dt.getDate()==d[0])); } |
Melhor função de validação de email que achei:
1 2 3 4 5 | function validateEmailAddress(emailString:String):Boolean { var myRegEx:RegExp = /(\w|[_.\-])+@((\w|-)+\.)+\w{2,4}+/; var myResult:Object = myRegEx.exec(emailString); return (myResult!=null); } |
* fonte: http://www.developphp.com/Flash_tutorials/show_tutorial.php?tid=532
Montei uma classe em AS3 para montar scroll bar vertical em MovieClips de flash. Ela tem basicamente 6 propriedades e 1 método:
Propriedades obrigatórias:
1. setScrollerMovieClip(mc:MovieClip) que define o movieclip objeto do scroll, geralmente o texto ou a imagem a ser deslizado (obrigatório);
2. setScrollBar(mc:MovieClip) é a barra de scroll (obrigatório);
3. setScrollTracker(mc:MovieClip) é o item central de arrasto da barra de scroll (obrigatório);
Propriedades não obrigatórias:
1. setScrollTrackerResize(b:Boolean) define se o item central de arrasto será redimensionado;
2. setScrollMarginLeft(n:Number) define o espaço entre o objeto do scroll e a barra de scroll;
3. setArrowTop(mc:MovieClip) define a seta superior da barra
4. setArrowBotton(mc:MovieClip) define a seta inferior da barra
Método:
init() inicia o scroll
Construtor:
Scroll(stage) deve receber stage como argumento!
Exemplo1:
Código do exemplo1:
1 2 3 4 5 6 7 8 9 10 | import mnsolucoes.Scroll; var sc:Scroll = new Scroll(stage); sc.setScrollerMovieClip(mcTexto) .setScrollBar(mcBar) .setScrollTracker(mcTrack) .setScrollTrackerResize(false) .setScrollMarginLeft(15); sc.init(); |
Exemplo 2 (só para brincar):
1 2 3 4 5 6 7 8 9 10 11 | import mnsolucoes.Scroll; var sc:Scroll = new Scroll(stage); sc.setScrollerMovieClip(mcTexto) .setScrollBar(mcBar) .setScrollTracker(mcTrack) .setArrowTop(mcArrowBotton) .setArrowBotton(mcArrowTop) .setScrollMarginLeft(15); sc.init(); |
Para quem quiser a classe e os exemplos usados no post estão disponíveis clicando aqui para download!
* A função de efeito de deslizamento e de redimencionamento do tracker eu retirei daqui: http://www.fuoridalcerchio.net/wordpress/2008/03/04/as3scrollbar/
** Por ser a primeira versão está sem controle de erros por enquanto!
Nessa parte do estudo, vou colocar a máscara em nosso campo CPF. Para isso, vou adicionar a biblioteca jQuery que pode ser baixada aqui http://code.jquery.com/jquery-1.4.2.min.js. O arquivo jquery.js, no meu caso, foi colocado em js/olamundo/jquery.js.
Existirá um conflito entre o prototype usado pelo Magento e o jQuery. A solução encontrada por mim é usar o noConflict do jQuery.
Primeiramente, vamos colocar o jquery.js no cabeçalho das páginas. Para isso, edite o arquivo app/design/frontend/base/default/layout/page.xml e acrescente depois de cookies.js:
1 2 | <action method="addJs"><script>olamundo/jquery-1.4.2.min.js</script></action> <action method="addJs"><script>olamundo/jquery.semconflito.js</script></action> |
Crie um arquivo chamado jquery.semconflito.js em js/olamundo com a seguinte instrução:
1 | $jq = jQuery.noConflict(); |
Agora quando o jQuery for ser usado, no lugar de $ usa-se $jq. Continuando… para colocar a máscara vou usar o plugin para jQuery chamado Masked Input. No meu caso, baixei ele e instalei em js/olamundo/jquery.maskedinput.js.
Com isso, basta editar o arquivo /template/customer/widget/olamundo_cpf.phtml para incluir o plugin e acrescentar o código para validação: $(‘cpf’).addClassName(‘validar_cpf’);
E o arquivo olamundo_cpf.phtml ficará assim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <label for="<?php echo $this->getFieldId('cpf')?>" class="required"><em>*</em><?php echo $this->__('CPF') ?></label>
<div class="input-box">
<input type="text" id="cpf" name="cpf" value="<?php echo $this->htmlEscape($this->getCpf()) ?>" title="<?php echo $this->__('CPF') ?>" class="input-text required-entry" <?php echo $this->getFieldParams() ?> />
</div>
<script type="text/javascript" src="<?php echo $this->getJsUrl('olamundo/cpf_cnpj.js'); ?>"></script>
<script type="text/javascript" src="<?php echo $this->getJsUrl('olamundo/jquery.maskedinput.js'); ?>"></script>
<script type="text/javascript">
$jq("#cpf").mask("999.999.999-99", {placeholder:"_"});
$('cpf').addClassName('validar_cpf');
Validation.add('validar_cpf',
'O CPF informado \xE9 invalido',
function(v){
return isCpfCnpj(v);
});
</script> |
O resultado final será esse aqui:
![]() |
Nessa continuação do estudo passado, vou colocar a validação do campo CPF no cadastro do cliente, para isso, será necessário abrir o arquivo que foi criado no outro post em
1 2 3 4 | <label for="<?php echo $this->getFieldId('cpf')?>" class="required"><em>*</em><?php echo $this->__('CPF') ?></label>
<div class="input-box">
<input type="text" id="cpf" name="cpf" value="<?php echo $this->htmlEscape($this->getCpf()) ?>" title="<?php echo $this->__('CPF') ?>" class="input-text required-entry" <?php echo $this->getFieldParams() ?> />
</div> |
O interessante é o sistema de validação usado no magento que vem da biblioteca prototype. Que é informado no atributo “class” do “input”, conforme vemos acima:
class=”input-text required-entry”
Existe vários tipos de validação pré-definidas conforme pode-se ver nesse link. Se usarmos por exemplo “validate-greater-than-zero”:
1 2 3 4 | <label for="<?php echo $this->getFieldId('cpf')?>" class="required"><em>*</em><?php echo $this->__('CPF') ?></label>
<div class="input-box">
<input type="text" id="cpf" name="cpf" value="<?php echo $this->htmlEscape($this->getCpf()) ?>" title="<?php echo $this->__('CPF') ?>" class="input-text required-entry validate-greater-than-zero" <?php echo $this->getFieldParams() ?> />
</div> |
Então o campo CPF, além de não poder ficar em branco, deverá conter um valor numérico maior que “zero”:
![]() |
Mas para validar o CPF teremos que criar uma validação própria. Para isso eu vou usar o código de validação criado por Márcio d’Ávila chamado cpf_cnpj.js e que pode ser encontrado em http://www.mhavila.com.br/topicos/web/cpf_cnpj.html.
No meu caso, criei uma pasta em js/ chamada olamundo e copiei o arquivo que, então, ficará disponível em js/olamundo/cpf_cnpj.js. Aí, basta editar o olamundo_cpf.phtml para incluir o arquivo:
1 2 3 4 5 6 | <label for="<?php echo $this->getFieldId('cpf')?>" class="required"><em>*</em><?php echo $this->__('CPF') ?></label>
<div class="input-box">
<input type="text" id="cpf" name="cpf" value="<?php echo $this->htmlEscape($this->getCpf()) ?>" title="<?php echo $this->__('CPF') ?>" class="input-text required-entry validate-greater-than-zero" <?php echo $this->getFieldParams() ?> />
</div>
<script type="text/javascript" src="<?php echo $this->getJsUrl('olamundo/cpf_cnpj.js'); ?>"></script> |
Claro que ainda precisamos adicionar o código à validação prototype. Para isso usei o estudo em http://blog.juliovedovatto.com/programacao-adicionando-validacao-de-cpf-no-magento/, de modo que o código de olamundo_cpf.phtml ficará assim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <label for="<?php echo $this->getFieldId('cpf')?>" class="required"><em>*</em><?php echo $this->__('CPF') ?></label>
<div class="input-box">
<input type="text" id="cpf" name="cpf" value="<?php echo $this->htmlEscape($this->getCpf()) ?>" title="<?php echo $this->__('CPF') ?>" class="input-text required-entry" <?php echo $this->getFieldParams() ?> />
</div>
<script type="text/javascript" src="<?php echo $this->getJsUrl('olamundo/cpf_cnpj.js'); ?>"></script>
<script type="text/javascript">
$('cpf').addClassName('validar_cpf');
Validation.add('validar_cpf',
'O CPF informado \xE9 invalido',
function(v){
return isCpfCnpj(v);
});
</script> |
Isso gera o seguinte resultado:
![]() |
Esse é mais um post do meu estudo sobre o Magento (1.4.0.1). Aqui a idéia é acrescentar o atributo CPF ao cadastro do cliente. Para isso:
Primeiro passo:
Criar a estrutura de pastas Olamundo/Customer dentro de app/code/local. Por exemplo:
![]() |
A pasta Olamundo/Customer/etc conterá o arquivo de configuração xml para o website e a pasta Olamundo/Customer/Blocks/Widget conterá a classe de configuração do campo CPF no frontend do website. Os arquivos serão criados nos próximos passos!
Segundo passo:
Avise o magento sobre o novo módulo, criando o arquivo “Olamundo_All.xml” em app/etc/modules com a seguinte estrutura:
1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Olamundo_Customer> <active>true</active> <codePool>local</codePool> </Olamundo_Customer> </modules> </config> |
Terceiro passo:
Precisamos definir o novo campo, em Olamundo/Customer/etc, crie o arquivo config.xml com o seguinte código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?xml version="1.0"?> <config> <modules> <Olamundo_Customer> <version>0.1.0</version> </Olamundo_Customer> </modules> <global> <fieldsets> <customer_account> <cpf><create>1</create><update>1</update></cpf> </customer_account> </fieldsets> </global> </config> |
Para que esses xml realmente configurem algo, é necessário apagar o cache do magento. Pode apagar todos os arquivos em: var/cache.
Quarto passo:
Devemos criar os atributos na base de dados, para isso, vá no root de seu magento e abra o arquivo index.php, na última linha (depois de Mage::run($mageRunCode, $mageRunType);) acrescente o seguinte código:
1 2 3 4 5 6 7 8 9 10 | $setup = new Mage_Eav_Model_Entity_Setup('core_setup'); $setup->addAttribute('customer', 'cpf' , array( 'position' => 1, 'required'=> 1, 'label' => 'CPF', 'type' => 'varchar', 'input'=>'text', 'apply_to'=>'simple,bundle,grouped,configurable', )); |
Dê um reload (F5) no browser para rodar a sua aplicação e executar o código acima, com isso será criada a estrutura de dados suficiente para você trabalhar com o campo CPF.
APÓS, VOCÊ PODE APAGAR O CÓDIGO ACIMA E DEIXAR O INDEX.PHP COMO ESTAVA ANTES!!!
Só por curiosidade! repare que na tabela “eav_attribute”, na última linha, foi criado o registro do atributo CPF que se relaciona com a tabela “eav_entity_attribute” (v. o campo: attribute_id) que, por sua vez, se relaciona com a tabela “customer_eav_attribute”.
Observe também que pela simples criação do registro, o campo já aparece no admin! Vá em Clientes| Gerenciar Clientes| Clique em algum cliente e acesse a aba à esquerda “dados de acesso”:
![]() |
Quinto passo:
Agora resta colocar o campo no frontend do website. Para isso, primeiramente, vamos criar o widget. Crie o arquivo Cpf.php em Olamundo/Customer/Block/Widget com o seguinte código:
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 | <?php class Olamundo_Customer_Block_Widget_Cpf extends Mage_Customer_Block_Widget_Abstract { public function _construct() { parent::_construct(); $this->setTemplate('customer/widget/olamundo_cpf.phtml'); } public function isEnabled() { return true; } public function isRequired() { return 'req' == true; } public function getCustomer() { return Mage::getSingleton('customer/session')->getCustomer(); } } |
Sexto passo:
O widget acima faz referência ao arquivo olamundo_cpf.phtml que conterá a visualização do campo e as regras de validação e máscara se for o caso. Vamos criá-lo em
O código de olamundo_cpf.phtml é:
1 2 3 4 | <label for="<?php echo $this->getFieldId('cpf')?>" class="required"><em>*</em><?php echo $this->__('CPF') ?></label>
<div class="input-box">
<input type="text" id="cpf" name="cpf" value="<?php echo $this->htmlEscape($this->getCpf()) ?>" title="<?php echo $this->__('CPF') ?>" class="input-text required-entry" <?php echo $this->getFieldParams() ?> />
</div> |
Sétimo passo:
Agora só falta alterar os arquivos de layout que são 3 para o caso do CPF:
Vamos fazer no register.phtml, o resto é só seguir a mesma lógica! Devemos inserir o seguinte código, pode ser depois do checkbox do newsletter e antes do $_dob:
1 2 | <?php $_cpf = $this->getLayout()->createBlock('Olamundo_Customer_Block_Widget_Cpf') ?>
<li><?php echo $_cpf->setRgie($this->getFormData()->getCpf())->toHtml() ?></li> |
Com isso, teremos a seguinte visualização:
![]() |