Sessão / Sessões em PHP

Sábado, 21/06/2008 by Leonir Zimmermann

Em primeiro lugar vc precisa sacar por que elas são necessárias. Quando um browser termina de carregar determinada página, a conexão entre ele e o servidor é desfeita. Não confunda conexão de internet com a conexão entre browser e servidor, esta última refere-se a comunicação entre eles.  Assim após o carregamento browser e servidor ficam separados, um não sabe o que o outro está fazendo. Então, quando vc solicitar outra página, o servidor não tem nem idéia mais do que vc fez na última conexão, pois para pedir esta nova página o browser se reconecta ao mesmo endereço do servidor e pede a outra página, detonando com a conexão assim que esta também carregar. Digo isto levando em consideração que as 2 páginas são do mesmo site e pertencem ao mesmo servidor.

A sessão não é uma coisa do PHP, mas do servidor. É uma área na memória do servidor que guarda o IP, da máquina que a acessou e qual browser que se conectou, a esta área de memória podem ser associadas outras informações que vc queira guardar, no estilo de variáveis. O PHP, é claro, possui uma ferramenta para manipular sessões do servidor. Assim, em um caso de login por exemplo, vc se loga e guarda numa sessão informações que indiquem aquele usuário está logado. Aí mesmo que a conexão seja desfeita, ao reconectar para carregar a próxima página, o servidor pode recorrer a sessão e ver que informações estão lá guardadas, como no caso, esta informação, pode dizer ao servidor: “sim ele está logado, e pode acessar esta página”.

Exemplo:

Para manipular sessoes no PHP:

arquivo1.php
<?
session_start();//inicializa o serviço da sessão

//cria uma variável do tipo sessão com a informação “sim”
$_SESSION['esta_logado'] = “sim”;
?>

arquivo2.php
<?
session_start();//inicializa o serviço da sessão
echo $_SESSION['esta_logado'];//vai imprimir: “sim”

?>
Isto gera a ilusão de que a variável “esta_logado” foi passada de uma página para a outra, porém ela foi buscada da sessão no servidor. Simples, fácil… mas uma ferramenta útil e poderosa!

Até a próxima!

PHP ou Javascript? Qual a diferença?

Sábado, 05/04/2008 by Leonir Zimmermann

Em perguntas que tenho recebido de leitores do Ahã… Programando… tenho percebido que alguns tem dificuldade de perceber a diferença de trabalho do PHP e do Javascript. Em linhas gerais quero tentar lançar alguma luz sobre o entendimento das funcionalidades destas ferramentas.

Em primeiro lugar vamos entender a internet:

O browser - Este tem as conexões com o servidor restritas ao momento de receber o conteúdo solicitado pelo usuário. Após a página ser carregada por completo a conexão é desfeita. Assim não há conhecimento por parte do servidor quanto ao que o usuário está fazendo com a página carregada no browser. E após o carregamento da página o servidor somente entrará em cena novamente quando o usuário clicar em um link, um botão de enviar ou coisa semelhante, aí novamente o browser irá localizar o servidor na web e solicitar a execução de algum serviço que traga outro conteúdo.

HTML - Hypertext Markup Language (linguagem de marcação de texto). Em sua essência o HTML é texto, só que com marcações denominadas TAG’s, delimitadas pelos caracteres “<” e “>”. Toda a página que for buscada no servidor deve trafegar pelo protocolo HTTP (Hypertext Transfer Protocol) que é o protocolo perfeito para transferência de HTML entre servidor e browser no cliente.

O interesse do browser por sua vez recai em interpretar estas tags, e classificar cada uma de acordo com sua serventia em um espaço reservado na memória do computador. Esta classificação se dá em estrutura de objetos. Nesta organização fica bem mais fácil de o browser “saber” o que é um botão, uma caixa de texto, saber dentro de quais tags estes componentes se encontram, monitorar seus eventos, renderizar os componentes na tela relacionando com CSS e tal.

Com o fim de que programadores WEB como nós pudéssemos acessar e manipular estes OBJETOS,  a netscape criou uma linguagem de script que por fim foi denominada Javascript (nossa amiga). Assim, no mesmo texto que provém do servidor e compõe o HTML podemos dar comandos Javascript para controlar os objetos criados a partir do HTML, e modificar a forma como estes são apresentados ou trabalhados. Vc já deve ter observado que Javascript não manipula as tags HTML como se fossem simples strings, mas objetos. Com propriedades, métodos e eventos.

Por exemplo, veja o HTML a seguir:

<html>
<body>
<div id=”coisa”></div>
</body>
</html>

Supondo que se queira adicionar um texto qualquer dentro da div coisa utilizando Javascript, utilizaríamos a seguinte sintaxe:

<script language=”javascript”>
var objeto_coisa = document.getElementById(”coisa”);
objeto_coisa.innerHTML = “um texto qualquer”;
</script>

Como isto funciona?

Primeiramente o objeto correspondente a id coisa precisa ser instanciado para uma variável através de getElementById. A instância (cópia, referência) é colocada na variável objeto_coisa. A partir desta variável podemos chamar métodos (funções) e propriedades (variáveis) do objeto. No caso apenas um texto foi lançado na propriedade innerHTML (Html interno) da tag referida pela variável objeto_coisa. Isto não modificou o HTML original colocando o texto no meio da tag. Mas modificou o objeto da div coisa que está na memória, e fez com que o browser apresentasse na tela o texto que foi atribuído para coisa.

Este teste pode ser reproduzido em sua máquina com a simples cópia dos 2 trechos de código anteriores, e a seguir colando em um arquvo “.html” e testar, eu testei e funciona hehehe.

E o PHP como funciona?

Já o PHP é executado no lado servidor. Este geralmente é utilizado para criar ou complementar o HTML que é enviado do servidor para o BROWSER de forma dinâmica. E no caso do PHP, como sua única função é criar o HTML sem monitorar eventos, ele trata o HTML puramente como string. Ou seja, ao utilizar um echo, ele está apenas acrescentando algo que será enviado através do protocolo HTTP para o browser. E é isto. Ao digitar uma url como: http://pagina.com.br/lista.php no browser, este receberá apenas texto (seja HTML, Javascript, CSS…). Ninguém jamais viu código PHP no fonte de uma página, pois este apenas é interpretado no servidor, e se não houver echo nada virá do servidor para o browser.

Veja como ficaria o problema anterior resolvido com PHP:

<html>
<body>
<div id=”coisa”><? echo “um texto qualquer”; ?></div>
</body>
</html>

Se o código HTML + PHP acima fosse acessado pelo browser, a única coisa que este receberia constaria do HTML já preenchido pela tarefa em PHP que foi interpretada e executada pelo servidor, assim:

<html>
<body>
<div id=”coisa”>um texto qualquer</div>
</body>
</html>

Em resumo:

Javascript:

1 - É interpretado e executado pelo browser, não pelo servidor.
2 - Não trata o HTML como string, mas cada tag individualmente como um objeto que pode possuir métodos, propriedades (ou atributos) e eventos.

É recomendado para tratar de assuntos que não devam consultar o servidor, mas que possam ser executados diretamente no browser sem perda de tempo, e também no caso de tratamento de eventos (onclick por exemplo).

PHP

1 - É executado no servidor, e nada “sabe” do que está acontecendo no browser. Somente responde quando o usuário solicitar através de links, botões, ou códigos AJAX que efetuem chamadas para tarefas no servidor.
2 - Trata o HTML puramente como string (texto).

É recomendado para fazer tarefas como buscar dados em banco de dados e complementar ou gerar HTML encima destes dados, ou para diversas outras tarefas que possam ser melhor tratadas no servidor.

É preciso ter em mente também que, quando um usuário solicitar algo do servidor uma conexão do browser com o servidor será estabelecida, e assim que o browser receber todo o HTML referente a esta página, a conexão é desfeita. Por isso não há como o servidor saber o que o usuário está fazendo com a página que recebeu. Pois o servidor apenas recebe ordens do browser, não podendo fazer nada além do solicitado pelo usuário. O Javascrript tem contribuído para o enriquecimento das aplicações web, por que pode ficar o tempo todo executando rotinas no browser e estar por dentro do que o usuário está fazendo. Então o programador da página pode fazer com que uma função detecte as necessidades do usuário e faça requisições ao servidor em momentos diferentes dos tradicionais, e mais, pode fazer isto escondido sem recarregar toda a página. Aí entra o AJAX, que pode fazer uma solicitação para o servidor digamos por debaixo dos panos (sem que o usuário tenha clicado nos tradicionais botões ou links). Mas uma tarefa pode ser escrita em Javascript para por exemplo monitorar objetos que estejam sendo arrastados na tela (Drag and Drop) e a medida que isto aconteça enviar ou buscar informações no servidor via AJAX.

É isto… ahhh e se ainda não entende AJAX leia o post “Desmistificando o Temível Ajax”

Como funciona a bilblioteca JAVASCRIPT DOJO?

Segunda-feira, 04/02/2008 by Leonir Zimmermann

Graças a Deus pela criatividade dos Web Designers programadores neste mundo! E principalmente por aqueles que criam códigos reutilizáveis e os compartilham gratuitamente. É o caso da biblioteca Javascript DOJO que vem com uma montanha de utilitários (widgets) para que os web designers criativos não precisem gastar dias ou meses programando para adicionar funcionalidades Javascript nos seus projetos WEB. Não vou usar minha capacidade de ignorância para transmitir a idéia de que exista apenas o DOJO com esta finalidade, sei que paralelamente estão em atividade as bibliotecas MochiKit, YUI, JQuery, EXT, GWT… Porém apenas posso comentar e dizer que é boa aquela que conheço e utilizo :-) .

Legal… mas o que o dojo faz?

Como dito anteriormente o dojo traz um cargamaço de widget’s (utilitários de interface) e funcionalidades que podem ser facilmente adicionados às páginas HTML. O melhor de tudo, com uma dúzia de linhas de código Javascript você pode instalar um widget à página, com um código limpo, nada de misturanga de scripts e HTML. A figura abaixo mostra um exemplo de widget que gera um quadro que pode ter o conteúdo dividido por Abas. Uma boa parte destes recursos são úteis em ferramentas da área administrativa, ou para a implementação de WEB services.

Exemplo de WIDGET DOJO com Abas


No que tange a funcionalidades, tenho utilizado o serviço de ajax do DOJO, que funciona muito bem e é compatível com os browsers que aceitam objetos xmlHttpRequest. Em outra oportunidade poderemos ver como utilizá-lo, particularmente achei muito prático poder enviar dados via POST com o ajax do dojo. Se você ainda não conhece AJAX e seus benefícios visite nesta página o link: Desmistificando o temível AJAX!.

Usar o DOJO requer:

Download da biblioteca em http://dojotoolkit.org/downloads. Ela pode ser descompactada em qualquer diretório do computador. Para quem já tem servidor instalado na máquina, recomendo extrair para htdocs ou www.

Uma vez “downloadeado”, pode-se acessar diretamente nas pastas os diversos testes de exemplo que estão previamente preparados para experimentos iniciais de quem pretende utilizar a biblioteca. Tais exemplos estão dispostos em arquivos HTML e distribuídos em uma série de diretórios dentro da pasta principal que contém os arquivos do dojo, quando de-zipada. A maneira mais prática de encontrá-los é através de uma pesquisa pelo sistema de arquivos, solicitando apenas aqueles com extensão “.html”, e com nome iniciado por “test_”. Veja na figura 2 um exemplo de pesquisa executada no windows vista que retornou os arquivos desejados. No resultado desta pesquisa bastaria um clique duplo sobre o arquivo test_Calendar.html para abrir no browser o exemplo de uma interface de calendário muito amigável gerada pelo DOJO.

Figura 2

Estes exemplos não somente proporcionam uma clara visão do resultado como permitem que o usuário abra o código fonte para entender a estrutura HTML e Javascript da interface.

Na prática… ô parte boa!

Para nosso estudo de um widget vou escolher o arquivo de exemplo “test_Tooltip.html”. Tooltip é o utilitário usado para criar aqueles balões estilosos que descrevem algum objeto presente na página. Na figura 3 é mostrado um tooltip em ação que traz comentários sobre a caixa de texto #1. Infelizmente a seta do mouse não foi capturada no printscreen, mas ela estava posicionada sobre a caixa de texto à esquerda do balão.
figura 3

Examinando detalhadamente o arquivo “test_Tooltip.html” vamos encontrar no cabeçalho o seguinte script:

<script type=”text/javascriptsrc=”../../dojo/dojo.js
djConfig=”parseOnLoad: true, isDebug: false“></script>
<script type=”text/javascript” src=”_testCommon.js“></script>

<script type=”text/javascript“>
dojo.require(”dijit.Tooltip”);
dojo.require(”dojo.parser”);// find widgets

dojo.addOnLoad(function(){
console.log(“on load func”);
var tt = new dijit.Tooltip({label:”programmatically created tooltip”,
connectId:["programmaticTest"]});
console.log(“created”, tt, tt.id);
});
</script>

Passo a passo:

<script type=”text/javascriptsrc=”../../dojo/dojo.js

Inicia pela referência ao arquivo que é o núcleo da referida biblioteca. Se dojo.js não for encontrado, os widgets não irão funcionar.

djConfig=”parseOnLoad: true, isDebug: false“></script>

O atributo
djConfig recebe configurações de comportamento que definem como o dojo vai interpretar este arquivo. O primeiro parâmetro parseOnLoad que é setado como true, informa que o dojo precisa “farejar” o HTML em busca de widgets. Ou seja, quando a página for carregada o dojo irá varrer todo o HTML da página, e identificar quais tags lhe pertencem, quais são as que contém widgets dojo. As tags identificadas precisam ser trabalhadas dinamicamente para que o comportamento delas se altere segundo as definições para o widget nela contido. O segundo parâmetro isDebug, se for setado como true irá acrescentar um console de erros a página para identificar possíveis problemas com os widgets. Este console é precioso para quem estiver trabalhando com Internet Explorer, pois até a versão 7 do IE as informações sobre erros de Javascript são bastante incompletas. Antes de publicar a página não esqueça de desativar o console do dojo (isDebug:false), para evitar que ele fique aparecendo inconvenientemente ao público geral.


<script type=”text/javascript” src=”_testCommon.js“></script>
Aqui trata-se de um script específico para o teste do tooltip.

<script type=”text/javascript“>
dojo.require(”dijit.Tooltip”);
dojo.require(”dojo.parser”);// find widgets

Carregamento dinâmico das ferramentas da biblioteca: de fato apenas dojo.js é essencial em todas as tarefas baseadas nesta biblioteca. As demais podem ser carregadas dinamicamente de acordo com a necessidade através de dojo.require. Isto colabora com a leveza do carregamento da página toda. Assim, no caso acima estão sendo invocadas as ferramentas para tooltip, e o parser, que é o farejador de widgets no meio do HTML. Nas linhas anteriores, em djConfig=”parseOnLoad: true foi configurado para que o parser atue quando a página for carregada, agora a ferramenta parser está sendo carregada através de require. Se não for carregada os widgets não funcionam (não será possível encontrar os coelhos na toca sem o cão farejador).

Até aqui foram vistos carregamentos de ferramentas básicas e suas configurações, agora começa um pouco de ação:

dojo.addOnLoad(function(){
console.log(“on load func”);
var tt = new dijit.Tooltip({label:”programmatically created tooltip”,
connectId:["programmaticTest"]});
console.log(“created”, tt, tt.id);
});
</script>

Acima é criada uma função javascript, que será executada quando a página estiver toda carregada. Esta função cria dinamicamente um tooltip e informa no console se a criação foi bem sucedida. O mais interessante de tudo aqui, é a ferramenta dojo.addOnLoad.  Com ela pode-se criar qualquer função dentro de addOnLoad que precise ser executada quando a página for carregada. Experimente algo assim:

dojo.addOnLoad(function(){ alert(“oii”); });

Isto faria que alert(“oii”) fosse executado assim que a página terminasse de ser carregada.

Agora o HTML dos WIDGET’S:

<input type=”input” id=”id1″ value=”#1″>
<span dojoType=”dijit.Tooltip” connectId=”id1″>tooltip para a caixa 1</span>

A primeira tag “<input…” é uma tag normal que, por exemplo, pode ser a entrada de dados para um formulário, observe que esta input é identificada pelo id “id1″. Logo abaixo a tag “<span” também é uma tag normal html, porém neste caso foi acrescido a ela o atributo dojType, este atributo indica que esta tag contém um widget dojo. Assim quando o parser encontrar esta tag detectará que trata-se de um widget dojo, e o dojo tomará as devidas providências para que este widget funcione. Basicamente este widget providencia o tooltip para a tag input. O texto contido na tag span (”tooltip para a caixa 1″) é o texto que irá aparecer dentro do balão tooltip, quando o mouse estiver sobre a caixa de texto id1. Por que as duas tags estão ligadas pela referência no atributo connectId da tag span. É importante perceber que aqui, no meio do html não foi requerido nenhum script especial, pois o dojo já efetua todas as tarefas de montagem quando a página for carregada, e depois fica aguardando apenas que os eventos (click, mouseover…) aconteçam. Assim, se fossem atribuídos 10 tooltip’s para outras 10 tag’s input, nenhuma nova linha de javascript seria requerida para isto.

Bom, por hoje é só.

Desmistificando o temível AJAX!

Domingo, 27/01/2008 by Leonir Zimmermann

O termo AJAX não provém do latim “Acessarium Javascriptum Atloren Xmelum”, não, mas da expressão da língua inglesa “Asynchronous JavaScript And XML” ou Javascript e XML assíncronos.

Um parêntesis teórico:

Esta questão de atividade assíncrona está para Javascript assim com THREAD’S estão para JAVA. Ou seja, a execução assíncrona ocorre em um tempo diferente da execução do script original. De modo que, se no meio de um looping for chamada a execução de uma tarefa assíncrona, o programa não irá aguardar a conclusão desta tarefa para então passar ao próximo passo do looping. Assim ao concluir a execução de um looping de 10 iterações, em que todas executam uma nova tarefa assíncrona, a nona tarefa pode estar sendo aberta e a primeira não ter sido concluída ainda, mas a terceira tarefa já pode ter retornado um resultado.

O que realmente interessa, prática!

Vamos partir de um layour HTML ultra básico:

<div id=“geral”>
<div id=“coluna_menu”></div>
<div id=“coluna_principal”></div>
</div>

Para incluir dados dinamicamente via PHP poderíamos proceder da maneira tradicional:

<div id=“geral”>
<div id=“coluna_menu”>
<a href=“index.php?arquivo=lista.php”>
</div>
<div id=“coluna_principal”>
<!– assim ao clicar no menu recarrega a página incluindo o arquivo que deve ser mostrado –>
<?php include($_GET['arquivo']); ?>
</div>
</div>

Tudo certo até aqui?

Bom, existe uma maneira de se carregar um conteúdo para dentro da div “coluna_principal”, sem usar frames ou recarregar a página utilizando includes.

Trata-se da técnica chamada de AJAX (Asynchronous JavaScript And XML). Serve basicamente para carregar dados (xml, html, texto) para uma página, abrindo um portal no espaço tempo do browser e indo buscar esta informação no servidor sem mexer no que já foi previamente carregado no browser ao acessar a página.

Um parêntesis de programação javascript:

Em primeiro lugar, gostaria de explicar como funciona o atributo innerHTML do javascript. Atenção innerHTML não é AJAX. Serve apenas para alterar dinamicamente o HTML contido dentro de uma tag. É preciso ter em mente que o Javascript vê as tags do browser de uma maneira diferente do PHP. Em Javascript, todas as tags podem ser referenciadas como sendo um sub-objeto, ligado ao objeto principal document. Em PHP tudo é tratado como texto, basta fazer echo de alguma coisa no meio do html e tá realizado. Mas isto por que ele faz o serviço dele lá no servidor, encima de um arquivo. O Javascript não, ele está sendo executado no browser, juntamente com o HTML. Logo, estando o HTML interpretado pelo browser, este HTML está na memória do computador, e o browser não mais o enxerga como um texto, mas como objetos que tem propriedades e comportamentos. Por exemplo, um botão não pode ser visto como um texto, mas deve ser visto como um programa, um objeto que reage ao click do usuário. Continuando:

var container = document.getElementById(‘coluna_principal’);
//getElementById localiza um objeto no meio do html,
//pelo seu ID, e retorna uma referência para este objeto.

Agora, a variável container se tornou um objeto com referência para a tag “coluna_principal”. E ele tem propriedades que podem ser acessadas a partir desta variável. Tipo, poderíamos descobrir que tag é esta:

alert(container.tagName); //isto mostraria “div” , pois div é o nome da tag

//que é identificada pelo id “coluna_principal”.

Aqui é que entra o innerHTML.

container.innerHTML = “<br> oi <br><br><br><br> bla bla bla”;

//com isto o texto e o HTML entre aspas foram adicionados dentro da tag div com id “coluna_principal”.

Bom esta é a maneira de escrever um HTML novo dentro de uma tag já existente, de forma dinâmica (DHTML - Dynamic HTML).

Então… como o Ajax funciona?

Ajax nada mais é do que a técnica para carregar conteúdo no browser, que utiliza funções javascript para buscar dados de um arquivo presente no servidor. Esta tarefa é executada por um componente do browser (XMLHttpRequest), que pode ser acessado através de funções Javascript para buscar no servidor um novo HTML ou XML.

<script>
//Tenta criar o objeto xmlhttp responsável por buscar os dados no servidor, são necessárias
// 3 tentativas de criação do objeto por conta das discrepâncias de browsers microsoft

try {
xmlhttp = new XMLHttpRequest();
} catch(ee) {
try{
xmlhttp = new ActiveXObject(”Msxml2.XMLHTTP”);
} catch(e) {
try{
xmlhttp = new ActiveXObject(”Microsoft.XMLHTTP”);
} catch(E) {
xmlhttp = false;
}
}
}



//a função de carregamento, recebe como parâmetro
//_idConainer - id da tag onde será escrito o novo HTML que será buscado no servidor
//_endereco - endereço da página que será buscada no servidor

function carrega(_idContainer, _endereco){

xmlhttp.open(”GET”,_endereco,true);
xmlhttp.onreadystatechange=function() {

if (xmlhttp.readyState==4){

//pega o resultado e filtra alguns caracteres absurdos
retorno=xmlhttp.responseText;
//tag_container contem a referencia da tag que vai receber
var tag_container = document.getElementById(_idContainer);
//escreve dentro da tag o novo HTML
tag_container.innerHTML=retorno; //olha o inner html aí

}
}

//Executa
xmlhttp.send(null)
}
</script>

Pronto! Lembra daquele trecho básico de html?

<div id=“geral”>
<div id=“coluna_menu”></div>
<div id=“coluna_principal”></div>
</div>
Para inserir um conteúdo HTML, no div de id “coluna_principal”, basta invocar a função carrega passando como parâmetro o id da div, e o endereço da página que contém os dados que devem ser carregados via AJAX. Ex:

<script>
carrega(’coluna_principal’, ‘dados.php’);

// ou se for o caso, a url completa:
carrega(’coluna_principal’, ‘http://www.minhapagina.com/dados.php’);

</script>

Quando carrega for chamado com os devidos parâmetros é que ocorre a tarefa de carregamento que se dá assincronamente, ou seja, não há como prever o tempo que levará para ela ser concluída, uma vez que este tempo depende de diversos fatores como: a velocidade da conexão de rede naquele momento, a quantidade de dados que serão carregados, a disponibilidade do servidor de atender etc…

E como fazer para um link ativar o carregamento de uma página usando AJAX?

<div id=“geral”>
<div id=“coluna_menu”><a href=“javascript:carrega(’coluna_principal’, ‘dados.php’);”>acessar dados</a></div>
<div id=“coluna_principal”></div>
</div>
Bom, como podemos ver, AJAX nada mais é do que uma técnica de carregamento de dados. O exemplo acima funciona, porém por tratar-se de um código exemplar de extrema simplicidade, não pode ser utilizado para aplicações sérias. Nele faltam diversos recursos, que talvez em outra análise sobre AJAX possamos aprofundar.

Por hoje é só! E como prometido, quero dedicar este pequeno artigo à minha amiga Web Designer Cristina Otto, abração Cris!!

Como passar valores do PHP para o Javascript e vice versa?

Sábado, 19/01/2008 by Leonir Zimmermann

O que não pode ser ignorado no casamento de Javascript com PHP é que os dois estão rodando em extremos diferentes. Os scripts de Javascript com suas variáveis estão no browser, carregados juntamente com o HTML, e os scripts PHP terão executado suas tarefas do outro lado da WEB, lá no servidor. A unica via de comunicação entre eles são os textos (html, javascript…) que transitam no protocolo HTTP. Isto é um paradoxo, uma vez que você encontrará PHP, HTML e Javascript no mesmo arquivo index.php (por exemplo). Porém, como dito anteriormente, cada um, PHP e Javascript atua em um ambiente diferente.Vamos começar com a prática! … ou melhor…. um pouco mais de teoria:

Bom… não é possível fazer um <? echo?> dentro de um arquivo “.js”, porque isto só funciona dentro de uma arquivo .php. Mas é perfeitamente possível um <? echo?> dentro de um arquivo “.php” da página (index.php por exemplo…) . Esta página também irá carregar arquivos “.js”. Aproveitando se desta aparente reunião, basta criar variáveis (javascript) globais, as quais podem ser denominadas “variáveis de ambiente”. Pois irão permitir o trânsito de informações do ambiente HTML+PHP para o âmbito do Javascript. Bla bla bla bla… vamos esclarecer isto na prática:

<script>
//para não criar muitas variáveis dispersas, é interessante criar um array de variáveis
var VARS_AMBIENTE = new Array();
//em nosso exemplo vamos preencher a variável de ambiente “caminho_servidor”
// a qual terá seu conteúdo fornecido por um echo PHP

VARS_AMBIENTE['caminho_servidor'] = <? echo $caminho_server; ?>;
</script>

É importante ter em mente que quando a página HTML + PHP for carregada no browser o código acima será visto como:

<script>
var VARS_AMBIENTE = new Array();
VARS_AMBIENTE['caminho_servidor'] = “algum valor fornecido pelo echo do PHP lá no servidor…”;
</script>

Pois o PHP já terá feito o serviço no servidor quando a página for carregada no browser. E então o código do script que estiver no meio do HTML virá do servidor com a variável previamente preenchida.

Continuando a página index.php… agora basta carregar o script que deve ter alguma referência a VARS_AMBIENTE['caminho_servidor'] para receber o valor contido nesta variável:

<script src=“meuscript.js”></script>

Pronto! Qualquer código contido dentro de meuscript.js que faça referência a VARS_AMBIENTE['caminho_servidor'] terá acesso ao camino do servidor.

E o caminho inverso?

Já do javascript para o PHP, como cada um estará sendo interpretado em uma ponta diferente da web (Javascript - cliente / PHP - servidor), a única forma de enviar dados continua sendo através de tráfego pela rede. Nesta hora uma tag “mágica” pode ajudar:

<form …>

<input type=“hidden” id=“dados” name=“dados_enviar” value=“” />

</form>

<!– Observe que na tag input acima o atributo value foi deixado em branco. Naturalmente se nenhum dado for setado para este atributo, nenhuma informação será recebido no servidor ao executar submit deste formulário.–>

<script>

//aqui a input hidden de id=”dados” recebe um valor dinâmicamente
//via código Javascript:


//cria um objeto de referência à tag input hidden
var objetoDados = document.getElementById(“dados”);
//altera o atributo value desta tag

objetoDados.value = “dados que vão para o servidor”;
</script>

No momento em que estes dados forem enviados por um submit, podem ser adquiridos no servidor através de um script PHP que os capture via post por exemplo:
<?

echo $_POST[ 'dados_enviar'];

?>

É isto!

Importe os arquivos CSS com classe!

Sexta-Feira, 18/01/2008 by Leonir Zimmermann

A primeira dica é na área de CSS. Para atachar ao site arquivos de CSS externos, geralmente utilizamos a sintaxe do padrão HTML4 a seguir :

<link type=”text/css” rel=”stylesheet” href=”arquivo1.css” mce_href=”arquivo1.css”>
<link type=”text/css” rel=”stylesheet” href=”arquivo2.css” mce_href=”arquivo2.css”>
<link type=”text/css” rel=”stylesheet” href=”arquivo3.css” mce_href=”arquivo3.css”>
<link type=”text/css” rel=”stylesheet” href=”arquivo4.css” mce_href=”arquivo4.css”>

Se forem necessários diversos arquivos, repetidas vezes esta linha deve constar em meio ao HTML. Mas existe uma maneira mais ”clean” de se fazer isto:

<style type=”text/css”>
  @import url(”arquivo1.css”);
  @import url(”arquivo2.css”);
  @import url(”arquivo3.css”);
  @import url(”arquivo4.css”);
</style>

Vi alguns exemplos trabalhando desta forma, e investigando a compatibilidade, descobri que dá pra usar livre e tranquilamente, veja a tabela a seguir que mostra a compatibilidade do recurso com diversos browsers:

http://imfo.ru/csstest/css_hacks/import.php

É isto.

A primeira blogada… será possível esquecer?

Sexta-Feira, 18/01/2008 by Leonir Zimmermann

Olá, quem escreve este breve artigo de apresentação é Leonir Zimmermann. Doravante denominado eu. Trabalho com programação à um longo tempo, principalmente para WEB, e o compartilhamento de experiências com amigos desenvolvedores corre paralelamente a este trabalho. Por sugestão do meu amigo Web Designer Marlon Petry, resolvi criar este blog para ampliar o âmbito de compartilhamento de experiências, tanto próprias quanto as recebidas de outros desenvolvedores.
Os principais assuntos que estarão em pauta na área de programação devem ser: CSS, Javascript, PHP, MySQL e até mesmo Java. Não poderão faltar tópicos sobre as técnicas de Tableless e Ajax que dão toques mágicos de aparência e desempenho às páginas de Internet. É isto.