Últimas Publicações

Animações Javascript com jQuery

Bom pessoal hoje vou falar sobre animações em Javascript, mais especifacemente, com jQuery.

Todos nós, algum dia, procuramos saber como funciona e como se faz uma animação em uma página WEB sem precisar do flash, silverlight ou qualquer outra linguagem do tipo.

A cada dia que passa os navegadores vão melhorando seu interpretador javascript para dar mais poder aos programadores web usarem e abusarem da linguagem.

Alguns defendem em se fazer tudo em flash ou silverlight mas eu não gosto de nenhuma dessas linguagens e por isso não me aprofundo no aprendizado deixando tempo para me empenhar em lidar com o jQuery em si. Sou mais um no meio da multidão que apoia a iniciativa do Google do Flashless em minhas aplicações.

Para fazer animações com o javascript puro ficariamos muito tempo lidando apenas com o cross-browser, o que não queremos hoje em dia, então inclui a jQuery em meu dia-a-dia para aumentar a produtividade na manipulação de elementos do DOM, que é a eventual finalidade da bliblioteca.

Vamos parar de enrolação e começar com animações em si.

Não vou entrar em detalhes dos efeitos padrões com show(), slideUp(), hide() entre outros. Vamos focar nas animações em si partindo direto para o:

Método Animate

Sem dúvida alguma o método animate do jQuery é superior ao que se encontra por aí em termos de facilidade e resultado final.

No exemplo abaixo temos uma DIV que altera apenas sua largura e altura de acordo com cliques do no botão Animar Div:

Elemento a ser animado.

Segue o código do exemplo acima:

jQuery(function(){
  jQuery("#animar1").toggle(
    function(){
      $("#animar").animate({ width:400, height:200 })
    },
    function(){
      $("#animar").animate({ width:200, height:150 })
    }
  );
});

Resumo das linhas:

  1. Setamos uma função para o evento onload do navegador especificando uma função como primeiro parâmetro do objeto jQuery.
  2. Seleciono o botão que contém o id ‘animar1′  e atribuimos e encadeamamos o método toggle que recebe duas funções que serão intercaladas de acordo com o cliques: primeira função chamada quando clicado pela primeira vez; segunda quando clicado novamente; clicado pela terceira vez ele retorna, e chama a primeira função. Mais detalhes acesse toggle.
  3. Dentro da função que foi definida no primeiro parâmetro nos selecionamos o elemento com id ‘animar’ e é atribuído a ele o método animate com a nova largura e altura do elemento.
  4. Na segunda função nos fazemos o inverso para o elemento retornar as dimensões anteriores.

Simples assim…

Especificações:

.animate( properties, [ duration ], [ easing ], [ callback ] )

Como podemos ver na explanação acima, o primeiro parâmetro é um objeto contendo as propriedades CSS e seus valores finais para executar animação. Os valores são o estado final da animação. No meu exemplo o elemento parte de 200px de largura para 400px.

Segunda parâmetro é a duração da animação.

Terceiro é uma função de abrandamento. A mais comum é a ‘swing’ que é chamada por padrão se omitido o parâmetro. As funções de abrandamento são como nas animações do Flex. São utilizadas para alterar o comportamento ao longo da animação. De uma olhada na documentação para mais detalhes.

Quarto parametro é uma função callback que será chamada assim que terminar a animação. Ex. quero remover o elemento ao final da animação. Então passo uma função  neste parametro, dentro dela executo $(this).remove() e o elemento animado será removido. ( this dentro da função callback referencia o elemento animado)

O método animate é muito simples de ser utilizado e funciona com êxito em navegadores antigos como IE6.

Com jQuery.animate não precisamos nos preocupar com cross-browser ( que é  uma das melhores vantagens de se utilizar um framework de desenvolvimento javascript ).

Bom pessoal é isso… fiz uma pequena animação com animate mas ele é capaz de fazer coisas muito complexas, depende de suas necessidades e imaginação.

Com jQuery tudo fica mais simples. Até uma animação, que é muito complexa de se fazer sem framework, fica simples com a utilização do jQuery.animate

Até mais então. Depois volto com animações mais avançadas utilizando plugins de abrandamento.

Recomendo o jquery.easing.js e os exemplos do http://jqueryui.com para aprender mais sobre o abrandamento.

Leituras recomendadas:

jQuery Animate API

http://api.jquery.com/toggle/

Escrevendo em Imagens com PHP – phpThumb

Após alguns meses de inatividade no blog encontrei um tempo para partilhar mais uma interessante funcionalidade da biblioteca phpThumb():  Water Mark Text ( fltr[] = wmt ).

Com o filtro wmt do phpThumb nós conseguimos inserir texto em imagens ou até mesmo criar imagens com texto puro utilizando o php.

O script abaixo é bem simples de se fazer e entender:

$thumbPath = '../../../../libraries/thumb/';

$fontPath = $thumbPath.'fonts/BAUHS93.TTF';

$text = "Este texto será exibido sobre a imagem.
Note que \\n quebra linha no texto.
Infelizmente ele não quebra sozinho.
Isto é muito utilizado para fazer um
captcha ( aquelas letras para confir-
mação de cadastros e outras coisas ).";

require_once( $thumbPath.'phpthumb.class.php');

$thumb = new phpthumb();
$thumb->setSourceFilename('paisagem.jpg');
$thumb->q = 90;
$thumb->fltr[]='wmt|'.$text.'|20|C|FFFFFF|'.$fontPath.'|100';
$thumb->GenerateThumbnail();
$thumb->OutputThumbnail();

Segue abaixo o código comentado por linha:

1º Caminho para o phpThumb;
3º Caminho para a fonte utilizada no texto;
5º Variável com o texto;

12º Require na biblioteca do phpThumb;

14º Instância da classe;

15º Seta imagem  utilizada como fundo. No meu caso, a imagem está no mesmo diretório, caso contrário, passe o caminho completo para iagem;

16º Qualidade da imagem a ser exibida;

17º Nessa linha onde inserimos o filtro com o texto.

Filtros no phpThumb tem vários parâmetros diferentes separados pelo | . No nosso caso inserimos:

  1. Primeiro acrescentamos um fltr[] = ‘wmt’;
  2. Depois disso inserimos a variável com o Texto;
  3. O número 20 representa o tamanho da fonte;
  4. C representa que o texto ficará centralizado na imagem. Tipos possíveis:  BR, BL, TR, TL, C, R, L,T, B, * where B=bottom, T=top, L=left, R=right, C=centre, *=tile;
  5. Representação hexadecimal da cor do texto. FFFFFF = branco.
  6. Caminho da fonte para o texto. Caso omitido, o phpThumb utiliza uma fonte padrão;
  7. 100 representa a opacidade do texto.

18º Esta linha implementa todos filtros e parâmetros passados.

19º Envia a mensagem para o navegador. Com essa linha não precisamos salvar a imagem no servidor. ( Essa prática não deve ser implementada na produção pois a geração da imagem requer muito processamento do servidor. Salve a imagem na primeira requisição e, após isso, exiba a imagem salva quando desejar).

O código acima exibe a imagem abaixo:

Texto sobre img phpThumb

Método muito simples e prático para escrever sobre as imagens.

O mesmo processo poder ser feito para criação de imagens com texto puro. Explicarei isso num próximo post, quando entrarei a fundo na geração de captcha.

Então é isso pessoal…

O código da imagem é somente o que está descrito acima, por isso, não vou disponibilizar download do código.

Para mais informações e download do phpThumb acesse o site da biblioteca.

Até a próxima pessoal… qualquer dúvida comente abaixo.

Manipulando imagens com PHP – PHPThumb()

Precisei tantas vezes redimensionar, recortar, mesclar, escrever em imagens que até perdi as contas.

Desde o começo utilizo a classe phpThumb().  Já pesquisei outras classes por aí mas não encontrei uma classe que desse uma gama de possibilidades que phpThumb oferece.

Ela faz tudo que precisamos fazer rotineiramente nas imagens:

Redimensionar;

Recortar;

Marca d’água;

Escrever sobre imagens;

Criar imagens sem nenhum source ( Utilizado por mim para criar apenas texto e salvar como imagem ).

Essas são as simples, mas a classe trabalha com filtros que permitem alterar contraste, blur, luz, sombra, girar, escala de cinza, negativo, sépia, balanço do branco, fumaça, saturação e muitos outros também estão na documentação.

Esse foi o post apenas de entrada para explicar o mundo que iremos entrar a partir deste post. Fique ligado nos próximos posts que começarei a utilizar a classe em exemplos práticos ou somente ensinando como se utilizá-la. Desde o básico até o avançado.

Você pode matar um pouco a curiosidade com nesse outro post onde explico como recortar imagens com php e jQuery ( parecido com o que o orkut disponibiliza ).

Conto com sua leitura e comentários nos próximos tópicos pra podermos interagir e aprender cada vez mais.

Porque o legal é dividir o conhecimento. Que na verdade ele não é apenas meu. É de todo mundo…

Até logo então…

Recortar imagem com jQuery e PHP

Bom pessoal um tempo atrás estava pesquisando como recortar a imagem igual faz o orkut na foto do perfil.

Não encontrei nada que me guia-se direito. Então resolvi juntar plugin jQuery com uma classe PHP para poder fazer o que queria.

Resumindo tudo: a mágica é feita com o plugin imgAreaSelect e a classe phpThumbNails.

Para ver o código em funcionamento clique aqui. Para baixar: Código Fonte

O imgAreaSelect é um plugin muito bacana para seleção de imagens. Como muitos plugins, existem vários do mesmo tipo. Esse foi escolhido pela facilidade, pelos parametros e callbacks do plugin.

Caso queiram utilizar o plugin para outra finalidade segue o link da página da documentação.

Agora vamos comentar sobre a parte server side que será utilizada a classe PhpThumbNails. Procurei algumas classes que trabalhem com manipulação de imagens mas não encontrei classe melhor do que essa. Várias funcionalidades dentre elas o recorte (utilizado nesse exemplo), redimencionamento, alterção de gama, canais alpha, levels, blur, contraste, sombras, flip horizontal e vertical, escala de cinza, efeito de negativo, balanço de branco e muitos outros filtros disponíveis para serem aplicadas nas imgens.

Para mais detalhes segue o link da documentação (em inglês): http://phpthumb.sourceforge.net/demo/docs/phpthumb.readme.txt.

Mão na massa então…

Vamos começar com a parte client side.

Primeiro criamos o arquivo que irá receber a imagem e os scripts javascript.

Incluimos o link do CSS do plugin de seleção, o jquery e o arquivo do plugin:




No BODY incluimos a imagem alvo:

Joaninha

Após incluir a imagem insira o script abaixo entra tags no HEAD do documento:

$(function(){
$('#ladybug')
  .imgAreaSelect(
		{
			onSelectChange: function selectChange(img, selection){
				$('#x').val(selection.x1);
				$('#y').val(selection.y1);
				$('#h1').val(selection.height);
				$('#w1').val(selection.width);
				$x1 = $('#x1').text(selection.x1);
				$y1 = $('#y1').text(selection.y1);
				$x2 = $('#x2').text(selection.x2);
				$y2 = $('#y2').text(selection.y2);
				$w = $('#w').text(selection.width+' px');
				$h = $('#h').text(selection.height+' px');
			},
			handles: true,
			x1: 127,
			x2: 265,
			y1: 78,
			y2: 249,
			persistent:true
		}
  );
});

No script acima temos a seleção da imagem pelo ID ( $(‘#ladybug’) ) e logo após chamamos o plugin com os segunites parametros:
onSelectChange = callback que é chamado cada vez que se altera a seleção na imagem ( entrarei em detalhes sobre a função mais adiante ) ;
handles = são os quadradinhos para orientar no redimensionamento com o mouse;
x1, x2, y1, y2 = São as coordenadas que serão selecionadas assim que o plugin for carregado na imagem;
persistent = Significa que mesmo que eu clique fora a seleção não irá sumir.

Agora inserimos o formulário para submeter a imagem ao arquivo PHP e também acrescentamos spans que apresentam os dados da seleção na tela.

Cordenadas da Seleção:

    X1:  - 

    X2:  - 

    Y1:  - 

    Y2:  - 

    Dimensões

    Largura (Width):  - 

    Altura (Height):  - 

Obs. Quem é responsável pela atualização é a função onSelectChange. Ela é executada para alterar os dados dos spans e também os valores no formulário selecionando os elementos pelo ID e utilizando o segundo paramatro para pegar os valores que o plugin passa.

Após feito isso nosso plugins de seleção já está configurado.

Agora vamos para a parte server side:

No meu caso do exemplo apenas criei o arquivo resize.php que recebe os parametros do formulário HTML e redimenciona a imagem.

A parte relevante do arquivo resize.php é a parte da classe phpThumb:

        require_once($_SERVER['DOCUMENT_ROOT'].'/libraries/thumb/phpthumb.class.php');
        $phpThumb = new phpThumb();
	$phpThumb->setSourceFilename($caminhoFotoTmp);
	$phpThumb->f='jpg';
	if ($_POST['x']){
		$phpThumb->sx=$_POST['x'];
		$phpThumb->sy=$_POST['y'];
		$phpThumb->sh=$_POST['h'];
		$phpThumb->sw=$_POST['w'];
	}
	$phpThumb->far='C';
	$phpThumb->err='index.php?msg='.urlencode($msgErro);
	$phpThumb->down=$infoArquivo['filename'].'.jpg'; // Seta arquivo para download (parametro é o nome da imagem)
	$phpThumb->GenerateThumbnail();
	if ( !$phpThumb->OutputThumbnail() ) die('Erro:' .print_r($phpThumb->debugmessages));

Primeiro instanciamos a classe.
Logo após setamos o arquivo que será trabalhado ( Caminho completo do arquivo no servidor no caso representado pela variavel $caminhoFotoTmp ).
Próxima linha indicamos o formato de saída da imagem pelo método ‘f’ ( format ) da classe.
Após isso ele executa uma verificação no parametro ‘X’ que indica a coordenada X para recorte. Caso tenha, então é setada as coordenada x, y e altura e largura para recorte indicados por h, w as funções sx, sy, sh, sw da classe.
Função far da classe indica para forçar aspect ratio para não distorcer a imagem.
Err é a URL onde será redirecionada a página caso ocorra algum erro.
Down força o download do arquivo para o usuário. Nele contém o nome da imagem de saída.
GenerateThumbNail() executa as ações de acordo com os parametros passados.
OutPutThumbnail() gera imagem para download e caso ocorra algum erro nessa função ele dá um print na variavel ‘debugmessages’ que apresenta todos os passos feitos pela classe e consequentemente os erros também.

Obs.: Caso queiram utilizar a classe para outra finalidade os parametros deste exemplo são todos opcinionais tendo seus valores default setados internamente. São obrigatórios apenas as funções setSourceFilename(), GenerateThumbNail(), OutPutThumbnail() ou RenderToFile( $caminhoDestino ) ( Salva o arquivo representado pela variavel $caminhoDestino, ao invés de forçar o download ).

Feito isso é só salvar o arquivo com o mesmo nome que esta no action do formulário.

Após ser submetido ele irá passar as coordenadas para o arquivo PHP que recortará e forçará o download da imagem.

Ficamos por aqui então. O exemplo é simples, só para mostrar o plugin e a classe PHP. Existem outras mil funcionalidades da classe thumbnails que podem ser utilizadas para a maioria dos procedimento com imagens.

Esse post foi só uma noção do que pode ser feito unindo plugins jQuery com poderosas classes do PHP.

Segue o link do exemplo em funcionamento e do arquivo para download do código fonte.

Exemplo em Funcionamento
Código Fonte

Até a próxima pessoal…

Método live() jQuery

Quantas vezes nos vemos encorralados pelo simples fato do javascript não inserir um comportamento automaticamente ao inserir um novo elemento no DOM atravez de script??

Uma das saídas simples que o jQuery nos proporciona é o método live().

O método live() só está disponível a partir da versão 1.3. Para versões anteriores existe o plugin livequery, que expliquei em um post passado.

Para explicar melho temos o exemplo do livequery que o funcionamento é o mesmo.

Leia o post do livequery() para maiores explicações de como funciona o método live() pois seu funcionamento é o mesmo.

Por hoje é só até mais então pessoal…

Eventos persistentes jQuery – LiveQuery Plugin

Antes de começar a aprender sobre o plugin livequery de uma olhada no post sobre eventos no jQuery.

Quando adicionado um comportamento a um elemento DOM ele fica acessível até que seja removido o evento ou o elemento.

Mas quando adicionamos um novo elemento com mesma características de outro que já tenha um evento, esse comportamento não é copiado para ele.

Por exemplo: Eu tenho um link para selecionar uma categoria. Ele tem a classe ‘lnkSelectClass’. Com o trecho abaixo adicionamos um evento a esse link:

$(".lnkSelectClass").bind('click', function(){ /*Corpo da função do evento */ });

Mas agora eu quero inserir um outro link para selecionar categoria. Então eu o faço com jQuery:

$(".lnkSelectClass:last").append('<a href="#" class="lnkSelectClass">Novo Link</a>');

O trecho acima irá adicionar um novo após o último link já existente. O comportamentos dos links que já exisitam não serão adicionados no novo link.

Aí é que entra o nosso grande amigo plugin Livequery. (Download no Final do Post)

O Livequery cria um loop que adiciona o evento aos elementos mesmo eles tendo sido adicionados dinamicamente o que deixa bem mais simples a vida do programador. Cada vez mais na Web 2.0 precisamos de comportamentos que persistem nos elementos.

O Livequery trabalha da mesma forma que o método bind() do próprio jQuery:

$(".lnkSelectClass")
  .livequery(
    'click',
    function(){
/*Corpo da função do evento */
}
);

No trecho acima fazemos a mesma coisa que no método bind(). Apenas trocando o nome do método para livequery.

Mas a grande diferença é que com o livequery o evento de click adicionado ao elemento irá persistir até que seja removido com o método unbind() ( o mesmo método que remove normalmente o evento ).

Fiz uma página de exemplo pra mostrar o plugin em ação:

http://alantavares.com.br/exemplos/jquery/livequery/

Tem duas div, com links e um botão para adicioná-los. Quando o link for clicado é exibido uma caixa de alerta.
Quando clicado no botão para inserir o link pelo livequery o comportamento é adicionado junto ao link.
Quando clicado para adicionar pelo bind o comportamento não é adicionado no link que não exibe o alerta.

Esse exemplo explica melhor como funciona na prática o plugin.

Quando for necessário a implantação de eventos persistentes em links, botões ou qualquer elemento, temos o livequery para nos ajudar.

Informações sobre o plugin:
Página do Plugin
Faça o download do arquivo Zip na página do plugin. O arquivo do Plugin é o jquery.livequery.js.
Documentação

Ficamos por aqui… Até a próxima…

Eventos no JQuery

Essa é uma grande questão que é importante frisarmos em um post único, os Eventos.

O mais popular modelo é o Modelo de Eventos DOM Nível 0. Apesar de não ser aprovado pelo W3C,  este padrão de eventos é o mais conhecido e empregado pelos navegadores.

Antes de entrar na questão de Eventos no jQuery analise os padrões de eventos do javascript neste post.

O jQuery emprega o Modelo de Eventos DOM Nível 2, que nos é dado através dos métodos que levam o próprio nome do evento.

Ex.:

O método click(), blur(), focus(), submit() entre outros são exemplos de métodos do jQuery para atribuir eventos ao objeto selecionado. O trecho a seguir atribui um evento de clique para o Objeto cujo Id é ‘BtnTeste’, então quando esse item for clicado é disparada a função determinada que abre apenas um alert:

$('#btnTeste').click( function(){ alert('teste'); } );

Todos os eventos tem o mesmo parâmetro, que é a função chamada quando o evento acontece.

Obs.: O jQuery tem o método hover() que simplifica o mouseover e mouseout. Com o método hover() podemos especificar duas funções: a primeira quando o mouse passa sobre o elemento e a segunda quando o mesmo sai do item. O código abaixo mostra o método hover empregado em uma div. Quando se passa o mouse sobre a div então é chamada a primeira função, e quando o mouse sai da div é chamada a segunda função:

$('div').hover( function(){ alert('sobre o elemento'); }, function(){ alert('sai do elemento'); } );

Uma tabela de Eventos suportadas pelo jQuery:

Método Retorno
.blur(função) jQuery
.change(função) jQuery
.click(função) jQuery
.dblclick(função) jQuery
.focus(função) jQuery
.hover(função over, função out) jQuery
.keydown(função) jQuery
.keypress(função) jQuery
.keyup(função) jQuery
.submit(função) jQuery
.mousedown(função) jQuery
.mousemove(função) jQuery
.mouseout(função) jQuery
.mouseover(função) jQuery
.mouseup(função) jQuery
.select(função) jQuery
.load(função) jQuery
.unload(função) jQuery

Obs.: Entende-se como valor de Retorno ‘jQuery’, da tabela acima, o conjunto selecionado pelo jQuery, o que torna possível o encadeamento dos métodos do jQuery.

Além dos métodos convencionais sitados acima existe também o método bind().

O bind() possui dois parâmetros:

  1. O primeiro é o evento propriamente dito especificado por seu nome sem o ‘on’ Ex.: eu quero estabelecer uma função de clique então eu coloco apenas o ‘click’ diferentemente do que emprega o modelo Nivel 1 que teria que estabelecer o ‘onclick’.
  2. O segundo parâmetro estabelece a função que será chamada quando o evento é executado.

Então vamos para um exemplo:

$('#btnTeste').bind('click', function(){ alert('teste'); });

Neste exemplo nós selecionamos o botão com Id ‘btnTeste’ e depois atribuimos um evento de clique a ele.
Simples não?!?!?!

Mas aí você me pergunta: Mas se eu quiser retirar o evento do elemento. Como faço??
Tarefa simples executada pelo método unbind().

$('#btnTeste').unbind('click');

O trecho de código acima apenas retira o evento de clique do elemento selecionado.

$('#btnTeste').unbind();

O trecho de código acima todos os eventos do elemento selecionado.

Obs.: O unbind() serve tanto para eventos atribuídos pelo bind() quanto para eventos atribuídos pelos seus próprios métodos. Então se eu chamo o método click() para um elemento ele pode ser removido pelo unbind().

Existe também o método one() que age da mesma forma que o bind(). A única diferença é o fato de que o one() executa o evento apenas uma vez, o removendo após a execução do evento.

Talvez você já saiba que o Modelo Nível 2 são diferentemente tratados pelo IE e os outros navegadores, mas o jQuery já trata essa diferença não sendo necessário a alteração do tipo do evento para ‘onclick’ que é utilizado pelo IE.

O jQuery também permite a criação de eventos personalizados como é feito em vários plugins como os UI, mas esse é um assunto para um próximo post.

Bom pessoal acho que é isso sobre os eventos no jQuery. Até a próxima então…

Adicionar Host Virtual ao Apache – XAMPP

Bom pessoal hoje vai ser um pequeno Tuto de como adicionar um host virtual ao apache.

Mas o que é um host virtual??

Host Virtual é um nome fictício criado para acessar determinada pasta no seu document root. Utilizado, na maioria das vezes, para subdomínios.

Ex.

Eu tenho um servidor rodando localmente. Meu site está no document root do servidor mas eu tenho um blog e queria adicioná-lo ao meu servidor local mas digitando ‘blog.localhost’ para acessá-lo.

Essa não é uma tarefa complicada de se fazer. No passo-a-passo vou explicar como criar o host ‘blog.localhost’ para acessar a pasta do document root corretamente.

Vamos começar então:

Primeiramente devemos criar um host no sistema operacional.

No Windows

  1. Abra a pasta c:\windows\system32\drivers\etc\.
  2. Dentro dessa pasta tem um arquivo ‘host’ sem extensão. Abra-o com o bloco de notas ou editor de texto preferido.
  3. Acrescente a linha: ‘127.0.0.1 blog.localhost‘ (sem aspas) no final do arquivo. O primeiro parâmetro é o IP a ser acessado (127.0.0.1 é o ip local) e o segundo é o nome do host a ser digitado no navegador.
  4. Salve o arquivo e pronto.

No Linux o caminho do arquivo é diferente. Ele fica na pasta /etc/host. A configuração e os parâmetros são os mesmos.

Agora vamos para a parte do Apache.

Em servidor que não são instalados pelo XAMPP :

Abra o arquivo de configuração do apache (httpd.conf). Ele sempre fica na pasta conf no diretório de instalação do apache.

No final do arquivo acrescente o trecho abaixo:

NameVirtualHost *

<VirtualHost *>
ServerName localhost
DocumentRoot c:/xampp/htdocs/
</VirtualHost>

<VirtualHost *>
ServerName blog.localhost
DocumentRoot c:/xampp/htdocs/blog/
</VirtualHost>

No XAMPP faça o seguinte:

Abra o arquivoc:\xampp\apache\conf\extras\httpd-vhosts.conf. Esse arquivo foi especialmente criado para configurações de hosts virtuais.

No final dele acrescente o mesmo bloco de texto acima.

Esse trecho de texto acima explica para o servidor que quando for digitado somente ‘localhost’ ele acessará a pasta root padrão, mas quando for digitado ‘blog.localhost’ ele acessará uma pasta ‘blog’ dentro do document root.

Obs.: Sem o bloco do localhost o servidor irá redirecionar todas solicitações para a pasta blog, então ele é fundamental para o funcionamento correto das configurações.

Após feita essas mudanças Reinicie o Apache. A pasta a ser redirecionada deve existir. Caso não exista então o apache não irá iniciar corretamente. Após isso ela já está acessível pelo o host http://blog.localhost/.

Bom pessoal por  hoje é isso. Até a próxima…

Resolvendo problemas do Apache – XAMPP

Bom pessoal tenho recebido várias pesquisas com erro de inicialização no apache no windows.

Alguns erros decorrem pelo simples fato de se instalar o xampp no diretório Arquivos de Programas mas também podem ser por diversos motivos como:

- Programas que utilizam a porta 80. Ex. Skype, alguns programas P2P, ETC.

- Além de programas também tem o conflito de outros servidores web rodando no mesmo PC como por exemplo o IIS.

- Na hora da instalação, por algum motivo, o serviço não é instalado corretamente ( recomendo instalar o serviço ao invés de deixa o xampp gerenciá-los).

- Bloqueio do firewall do windows ou algum outro firewall pessoal.

Para poder resolver alguns desses problemas a simples alteração da porta em que o Apache se comunica já resolve o erro.

Como Alterar a porta do Apache??

Para alterar a porta do Apache apenas entre no diretório de instalação do apache dentro do XAMPP (geralmente c:\xampp\apache\). Dentro desse diretório existe a pasta ‘conf’, onde fica o arquivo ‘httpd.conf’.

Abra este arquivo com o bloco de notas ou algum editor de texto simples. Procure pela linha onde está escrito “Listen 80″ (na maioria das vezes linha 53).  Essa linha configura a porta do apache. Apenas altere o 80 para um número como 8080, 81 ou 1030. Testei essas portas e funcionam perfeitamente.

Após a alteração da porta, o Apache terá que ser reiniciado.

Como saber se outra aplicação utiliza a porta 80 ??

Os programas mais conhecidos tem em suas documentações a porta que utilizam. Pesquise no site do programa. Caso ele utilize a porta 80 então siga a dica acima e altere a porta do apache.

Após alteração da porta não consigo acessar o localhost. O que fazer??

No link de acesso, por padrão http://localhost, não precisamos colocar a porta 80 pois ela é padrão se omitida diretamente no link de acesso. Então para acessar o localhost terá que ser acrescida a porta ao link antecedido de dois pontos ( : ). Caso você coloque a porta 8080 então o link mudará para http://localhost:8080 e assim a mesma coisa para as outras portas.

Para acessar a pasta ‘teste’ do servidor então o link seria http://localhost:8080/teste. O número da porta fica em frente ao nome do site.

Como saber se o firewall está bloqueando o Apache??

A coisa mais sensata a se fazer é adicionar a porta do Apache nas exceções do firewall.

No Firewall Windows siga a seguinte dica:

  1. Abra o Painel de Controle do windows ( Abra o Executar  (WinKey + R)  e digite ‘control’  );
  2. De dois cliques em Firewall do Windows ( Na exibição padrão) ou então, no modo por categoria, clique em Central de Segurança e Depois em Firewall do Windows embaixo da janela que se abre;
  3. Na janela de firewall desmarque a opção ‘Não permitir Exceções’ caso esteja marcada e vá para a aba Exceções;
  4. Clique em adicionar porta. Colque o nome Apache e em ‘Número da Porta’ coloque a porta do apache (Padrão porta 80). Se a porta foi alterada conforme a dica acima então coloque o número que foi designado.
  5. Após isso clique em OK e depois OK denovo.

Caso você utilize um firewall pessoal então pesquise no site do fabricante para saber como adicionar portas como exceção.

Como saber se o serviço está instalado corretamente?

Apenas abra os gerenciador de serviços do windows (WinKey + R para abrir o Executar e depois digite ‘services.msc’ sem aspas). Haverá um serviço com o nome apache listado.

Meu Apache não está instalado como Serviço no Windows. Como instalá-lo?

Abra o CMD (WinKey + R para abrir o Executar e depois digite ‘cmd’ sem aspas). No windows vista, o DOS precisa ser executado como Administrador.

Após abrir entre na pasta de instalação do apache, no caso do xampp digite ‘cd c:\xampp\apache\bin\’ no DOS.

Então digite o comando ‘apache -k install’. O serviço se intalará automaticamente e emitirá uma mensagem de sucesso. Caso contenha erros no arquivo de configuração então aparece uma mensagem de erro no cmd e será preciso arrumá-lo para poder instalar o Apache corretamente.

Agora o Apache está instalado corretamente, podendo ser iniciado pelo próprio DOS com o comando ‘net start apache2.2′.

Nesse post expliquei alguns tipos de erro que podem atrapalhar a execução do Apache.

Caso não tenha resolvido seu problema então comente sua dúvida nesse post que tentarei solucionar…

Até a próxima então…

Borbulhamento de Eventos Javascript

O borbulhamento dos eventos no javascript é simples de se entender.

Quando estipulamos um manipulador para um elemento, como o click, por exemplo, ele é acionado quando o elemento é clicado.

Mas não é somente isso que ocorre quando o elemento é clicado.

Depois de acionado o click do elemento atual então é checado se o Pai desse elemento também tem um manipulador igual. Caso tenha, ele também é invocado causando assim um ‘borbulhamento’ nos eventos que percorre do Elemento até o raiz do DOM.

Esse borbulhamento pode ser visto clicando na imagem desse exemplo simples.

http://blog.alantavares.com.br/wp-content/uploads/2009/08/borbulhamento.html

Neste exemplo é atribuído um evento de click para todos elementos da página.

Podemos ver claramente os eventos se propagando para o topo do DOM.

Quando clicanos na imagem os eventos que setamos para os seus ancestrais também são chamados, o que faz com que apareçam na tela todos os elemetos.

Simples não…

No Modelo de Eventos DOM Nível 2 existe mais uma fase, a fase de captura. Ela é setada apenas pelos navegadores que suportam o método addEventListener (Veja mais nesse post sobre eventos no javascript).

O borbulhamento é um fator simples que realmente é interessante que saibamos, pois se algum da precisarmos, podemos recorrer a ele para dar aquela mãozinha e henriquecer mais ainda nossa aplicação.

Então é isso pessoal… Até mais…