Mostrando postagens com marcador programando. Mostrar todas as postagens
Mostrando postagens com marcador programando. Mostrar todas as postagens

terça-feira, 6 de outubro de 2015

Pulando campos (tabulando) ao pressionar Enter

Não sei quem foi o infeliz que teve a infeliz ideia de fazer isso desse jeito, mas por algum motivo infeliz, ainda tem gente que acha que, pressionando 'Enter', o cursor do infeliz deve pular para o próximo campo infeliz, ao invés de, alegremente, enviar o formulário atual.

Enfim.

 function navegarEnter(){  
   $(document).on('keypress', 'input,select,textarea', function(event){  
     if(event.keyCode === 13) {  
       $('input,select,textarea')[$('input,select,textarea').index(this)+1].focus();  
       event.preventDefault();  
     }  
   });  
 }  


Coloquei como função mesmo, porque deu preguiça de fazer um plugin.

quinta-feira, 6 de agosto de 2015

Utilizando scripts sh com parâmetros no Ubuntu

..provavelmente funciona em qualquer SO linux, mas enfim.

O exemplo abaixo é um script que recebe como parâmetro uma mensagem pra ser usada no commit do git.

 #!/bin/sh  
 MENSAGEM="$1"  
 cd /var/www/pastadoprojeto/  
 git add .  
 git commit -m "$MENSAGEM"  
 git push origin master   

Depois de dar um chmod +x, chama ele assim:

 ./script.sh mensagem do commit

quarta-feira, 5 de agosto de 2015

Escrevinhando a data em pt-br no mysql

Esta query é pra colocar o mysql em pt-br:
 SET lc_time_names = 'pt_BR';  

.. e essa outra, pra pegar a data:
 select date_format(now(), '%W, %d de %M de %Y')  

O resultado sai assim:

 quarta, 05 de agosto de 2015  

(na verdade, o resultado depende da data e hora atual, mas isso não é o importante)

sexta-feira, 1 de agosto de 2014

Algumas regras para o htaccess

 #redirecionando para www  
 RewriteEngine on  
 RewriteCond %{HTTP_HOST} ^dominio.com.br [NC]  
 RewriteRule ^(.*)$ http://www.dominio.com.br/$1 [R=301,L] 
 
#habilitando compressao gzip no php  
 php_value output_handler ob_gzhandler 
 
#habilitando cache do apache  
 ExpiresActive On  
 ExpiresDefault A2419200  
 ExpiresByType image/x-icon A2419200  
 ExpiresByType application/x-javascript A2419200  
 ExpiresByType text/css A2419200  
 ExpiresByType text/html A518400 
 
#desabilitando cache para scripts com conteudo dinamico  
 <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">  
 ExpiresActive Off  
 </FilesMatch> 
 
#habilitando rewrite para urls amigaveis  
 RewriteEngine On 
 
#enviando requisicoes ao dominio.com/sitemap para o arquivo gerador do sitemap  
 RewriteRule ^sitemap(.*)$ sitemap.php [L] 
 
#redirecionando todas as requisicoes para o index.php, que serve como main controller  
 RewriteCond %{SCRIPT_FILENAME} !-f  
 RewriteCond %{SCRIPT_FILENAME} !-d  
 RewriteRule ^(.*)$ index.php?cod=$1 [QSA] 
 
#habilitando CORS (cross site http requests)   
 <IfModule mod_headers.c>  
 Header set Access-Control-Allow-Origin "*"  
 </IfModule> 
 
#habilitando compressao do apache  
 <ifmodule mod_deflate.c>  
 AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript text/javascript  
 </ifmodule>  

sexta-feira, 31 de janeiro de 2014

Redirecionando de um domínio para outro e mantendo os parâmetros na url

Com .htaccess, obviamente.


 RewriteEngine On  
 RewriteCond %{SCRIPT_FILENAME} !-f  
 RewriteCond %{SCRIPT_FILENAME} !-d  
 RewriteRule ^(.*)$ http://novodominio.com/$1 [QSA]  

terça-feira, 21 de janeiro de 2014

Exportando um ou mais registros no MySql com mysqldump

Ás vezes a gente precisa exportar só um registro de uma tabela.
Dá pra fazer assim:

 mysqldump -t -u usuario -psenha banco tabela --where=id_tabela=666 > ~/insert.sql  

Só pra lembrar: o parâmetro -p recebe a senha 'colada' nele, por exemplo, se a senha for 'estrogonofe', fica assim:

 mysqldump -t -u usuario -pestrogonofe banco tabela --where=id_tabela=666 > ~/insert.sql  

E no final, onde tem '~/insert.sql', é onde vai ser gerado o arquivo com o comando sql pra dar o insert no banco.

quarta-feira, 18 de dezembro de 2013

Trocando o wallpaper do Windows usando linha de comando

Ingredientes: Irfanview, uma pasta com imagens, e Windows.
1 - Instale o Irfanview. Talvez precise instalar o Windows antes.

2 - Crie um arquivo com a extensão .bat, com o conteúdo abaixo:

 dir D:\Wallpapers /s /b *.jpg > list.txt  
3 - Execute este arquivo para gerar a lista de imagens.

4 - Crie outro arquivo .bat, com o conteúdo abaixo. Esse arquivo é quem dá o comando pro Irfanview trocar a imagem:

 i_view32.exe /filelist=D:\wallpapers\list.txt /random /wall=0 /killmesoftly  

Happy festivus!

sexta-feira, 11 de outubro de 2013

Relógio em javascript

Um pequeno relógio em javascript:

 <form name="crono" style="margin:0px;">  
      <input id="relogio" width="30" />  
      <script language="JavaScript">  
           var data = new Date();  
           function data_inicial(ano,mes,dia,hora,minuto,segundo){  
                data.setFullYear(ano)  
                data.setMonth(mes-1)  
                data.setDate(dia)  
                data.setHours(hora)  
                data.setMinutes(minuto)  
                data.setSeconds(segundo)  
           }  
           function zeros(number) {  
                if (number < 10) {   
                     number = ("0"+number);   
                }  
                return number;  
           }  
           function Relogio() {  
                var formato = zeros(data.getDate())+'/'+zeros(data.getMonth()+1)+'/'+zeros(data.getFullYear())+' '+zeros(data.getHours())+':'+zeros(data.getMinutes())+':'+zeros(data.getSeconds());  
                data.setSeconds(data.getSeconds()+1)  
                document.getElementById('relogio').value = formato;  
                setTimeout("Relogio()",1000);  
           }   
           data_inicial(2013, 09, 12, 15, 09, 05); //comente para começar com a data atual 
           Relogio();  
      </script>  
 </form>  

Utilizando jquery-ui tabs + jquery validation plugin

Quando o plugin encontra um elemento com erro, o elemento automaticamente ganha foco.
Mas quando o elemento está em uma aba que não está habilitada no momento, não acontece nada.

Pra que o elemento ganhe foco e a aba passe a ser a ativa, segue a função:
 $('#formulario').validate({  
           ignore: "",//para validar os elementos que estão nas abas desabilitadas  
           highlight: function(element, errorClass, validClass) {  
                var div = $(element).parents('.ui-tabs-panel').attr('id');//encontra a div em que está o elemento inválido  
                var index = $('#tabs ul li a').index($('a[href="#'+div+'"]')); //encontra o indice nos links  
                $("#tabs").tabs( "option", "active", index ); //seta a aba como ativa  
           }  
      });  


quinta-feira, 3 de outubro de 2013

Quando se usa o editor tinyMCE junto com o jquery.validate, acontece um problema que o usuário precisa clicar duas vezes no botão de salvar, por um motivo que não lembro qual é.

Pra resolver isso, precisa chamar a função triggerSave no clique no botão de enviar, mais ou menos assim:

 $('button.salvar').click(function(){  
     if (tinyMCE) tinyMCE.triggerSave();  
 });  

terça-feira, 17 de setembro de 2013

Validando datas em pt-br com jQuery Validate

assim:
 $.validator.addMethod(  
      "date",  
      function(value, element) {  
           var check = false;  
           var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;  
           if( re.test(value)){  
                var adata = value.split('/');  
                var gg = parseInt(adata[0],10);  
                var mm = parseInt(adata[1],10);  
                var aaaa = parseInt(adata[2],10);  
                var xdata = new Date(aaaa,mm-1,gg);  
                if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) )  
                     check = true;  
                else  
                     check = false;  
           } else  
                check = false;  
           return this.optional(element) || check;  
      },  
      "Insira uma data válida"  
 );  

sexta-feira, 16 de agosto de 2013

Escrevendo a data e hora atuais do servidor

Mexer com datas e php parece ser uma arte, algo que poucos dominam.

Eu, por exemplo, não sou um deles. Mas eu vou tentando.

Primeiro, precisamos setar o locale do servidor para nosso querido idioma:

 setlocale(LC_ALL, 'pt_BR.utf8'); 


Se o servidor for windows, só pra variar, tem que ser de um jeito diferente:
 setlocale(LC_ALL, 'ptb');  


Depois, usamos strftime pra escrever a data atual.

 echo strftime('%A, %d de %B de %Y, %H:%M');  

O resultado fica:
sexta-feira, 16 de agosto de 2013, 15:02

terça-feira, 21 de maio de 2013

Time is never on my side

Pegando uma data do banco, adicionando dias e retornando ela formatada:
 $vcto = new DateTime($item['data']);  //$item['data'] contém uma data no formato YYYY-MM-DD HH:mm:ss
 $vcto->modify('+1 month');  //período de tempo para adicionar
 echo $vcto->format('d/m/Y');  //escrevendo a data no formato d/m/Y

Não sei quem inventou que as datas tem que ser escritas com o ano na frente.
Acho que isso só faz sentido se o programador acabou de acordar de um coma de seilá, 5 anos, e a primeira coisa que ele fez foi consultar a hora no servidor usando a função NOW().

sexta-feira, 17 de maio de 2013

Dois jquery em um

Eu sempre esqueço como se utiliza a função append() do jQuery várias vezes seguidas, então lá vai:

 $('#senha')  
                .append(  
                     $('<li>').addClass('item')  
                     .append(  
                          $('<input>').attr({type:'password',name:'senha',id:'senha'})  
                     )  
                     .append(  
                          $('<label>').text('(preencha somente se quiser trocar)').addClass('obs')  
                     )  
                )  

Outra coisa,  é quando se cria um formulário de troca de senha.
Por padrão, o Chrome vai preencher o campo da senha automaticamente, mas nem sempre ele vai preencher o campo de repetir a senha.
Aí, pra não encher o saco do usuário, que teria que digitar a senha no campo de repetir-senha, a gente coloca um valor qualquer no campo de senha e no de repetir-senha:

 <input type="password" name="senha" id="senha" class="" value="$password" />  
 <input type="password" name="repetir_senha" id="repetir_senha" class="" value="$password" />  


Depois, com jQuery, a gente limpa o value desses campos. O detalhe é que não funciona se simplesmente fizer assim:

 $(document).ready(function(){  
      $('#senha,#repetir_senha').val('')  
 })  


Precisa dar um tempo após o evento ready, senão o Chrome vai perceber e o negócio não vai funcionar. Então, precisa usar o setTimeout, para dar um atraso na execução:
 $(document).ready(function(){  
      window.setTimeout("$('#senha,#repetir_senha').val('')",100);  
 })  

quinta-feira, 25 de abril de 2013

Calculando idade com Mysql e Javascript

Não com os dois ao mesmo tempo, obviamente.

Só pra lembrar: nunca defina o campo de data como DATETIME, a menos que tu precise contar quantos anos, dias, horas, minutos e segundos o vivente tem de existência. Se não for o caso, use apenas DATE.

 DATE_FORMAT(FROM_DAYS(TO_DAYS(CURDATE())-TO_DAYS(nascimento)), '%y') AS idade,  

Agora, com javascript:
 /*  
       * calcularIdade  
       * Calcula a idade baseada na data informada  
       * @param string string texto no formato d/m/Y  
       */  
      function calcularData(string){  
           var tmp = string.split('/');  
           var data = new Date(tmp[2], tmp[1], tmp[0]);  
           var hoje = new Date();  
           var idade = Math.floor((hoje-data) / (365.25 * 24 * 60 * 60 * 1000));  
           return idade;  
      }  
Fontes: ma.tt/2003/12/calculate-age-in-mysql/
http://stackoverflow.com/questions/5524743/jquery-age-calculation-on-date

terça-feira, 22 de janeiro de 2013

Operações com datas em PHP do jeito quase certo

Há uns 2 meses atrás, fiz uma função que somava 10 dias em uma certa data.
Fiz assim:
 (date('d')+10).date('/m/Y');  

É até vergonhoso ver que fiz algo de um jeito tão jurássico, há apenas 2 meses. Só percebi o problema porque um dos vendedores tentou cadastrar um orçamento com a data 32/01/2013...

Como agora tem toda essa história de 'php do jeito certo', decidi ver qual o jeito certo de se fazer, que é mais ou menos o seguinte:
 $hoje = date_create();  
 date_add($hoje, date_interval_create_from_date_string('10 days'));  
 echo $hoje->format('d/m/Y');  


Mas, ao testar em produção, deu erro, porque a versão do php do servidor está desatualizada (novidade...), e a função date_add só existe a partir da versão 5.3.0. Aí tive que tentar o segundo jeito certo, que é algo assim:

 $date = date_create();  
 date_modify($date, '+10 day');  
 echo date_format($date, 'd/m/Y');  

sexta-feira, 11 de janeiro de 2013

Exportando tabelas para excel e acertando o formato dos campos

Como 'gerar' um arquivo excel com php, todo mundo já sabe:

$arquivo = "export".date("dmY_His").".xls";
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=\"$arquivo\";"); 
Mas como fazer com que as colunas fiquem com os tipos de dados certos, como por exemplo, os campos de data?

Simples: Criando o seguinte css:
.date {
  mso-number-format:"Short Date";
}
E aplicando este estilo na célula da tabela que contém o valor que deve ser formatado.

Aqui tem os formatos aceitos:

http://cosicimiento.blogspot.com.br/2008/11/styling-excel-cells-with-mso-number.html

Fonte:
http://cosicimiento.blogspot.com.br/2008/11/styling-excel-cells-with-mso-number.html
http://stackoverflow.com/questions/354476/html-to-excel-how-can-tell-excel-to-treat-columns-as-numbers

sexta-feira, 8 de maio de 2009

Perseguição


Uma das frases mais verdadeiras é aquela que diz que 'a solução do problema muda o problema'.

Quando eu troco um site de servidor, tenho que baixar todos os arquivos pro meu computador, pra depois enviar de novo pro novo lugar.
Quando o site é simples, isso é tranquilo. Nunca demora muito, porque o arquivo normalmente fica pequeno.
Mas quando o site tem um visual mais cheio de frescurinha, demora muito porque o arquivo fica muito grande.

Até que um dia eu descobri um jeito de enviar os arquivos de um servidor direto pro outro, sem precisar baixar pro meu pc. O que eu levava meia hora pra baixar, e uma hora pra enviar pro lugar novo, era feito em segundos.

Até que contrataram um novo servidor que não me deixa fazer isso. Ou seja, tenho que baixar e enviar tudo de novo...

..e enquanto isso, eles tão lá esperando eu receber e enviar, pra pegar as novas senhas pra voltar a usar o site. E provavelmente reclamando da minha demora.