<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Ahã... programando...!</title>
	<atom:link href="http://ahaprogramando.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ahaprogramando.wordpress.com</link>
	<description>Programação Web com maionese e catchup</description>
	<lastBuildDate>Wed, 07 Dec 2011 15:35:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ahaprogramando.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/3fb123434dfb68fcf1fe56b8c45b4c27?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Ahã... programando...!</title>
		<link>http://ahaprogramando.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ahaprogramando.wordpress.com/osd.xml" title="Ahã... programando...!" />
	<atom:link rel='hub' href='http://ahaprogramando.wordpress.com/?pushpress=hub'/>
		<item>
		<title>dotProject, aquietando os Erros, Warnings e Deprecateds</title>
		<link>http://ahaprogramando.wordpress.com/2010/11/12/dotproject-aquietando-os-erros-warnings-e-deprecateds/</link>
		<comments>http://ahaprogramando.wordpress.com/2010/11/12/dotproject-aquietando-os-erros-warnings-e-deprecateds/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 11:11:04 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[dotProject]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=116</guid>
		<description><![CDATA[Este é um post rápido e pontual. Não sou usuário (pelo menos por enquanto) da ferramenta dotProject em PHP. Mas um amigo solicitou ajuda por que ao instalar e usar o dotProject se deparou com um monte de mensagens que informam problemas de sessão e funções depreciadas. Inicialmente tentamos modificar a apresentação de mensagens de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=116&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este é um post rápido e pontual. Não sou usuário (pelo menos por enquanto) da ferramenta dotProject em PHP. Mas um amigo solicitou ajuda por que ao instalar e usar o dotProject se deparou com um monte de mensagens que informam problemas de sessão e funções depreciadas. Inicialmente tentamos modificar a apresentação de mensagens de erro no php.ini do servidor&#8230; mas nada. &#8220;Ô bixinho rabujento esse dotProject&#8221;. Mas então decidi instalar o dotProject na minha máquina e &#8220;mexeriquiar &#8220;. Descobri que a solução é bem simples: basta abrir o arquivo <strong>base.php</strong>, e modificar o primeiro parâmetro encontrado dentro dele. Então se vc estiver enfrentando este problema também, abra este arquivo e onde encontrar:<br />
<span style="color:#0000ff;">ini_set(&#8216;display_errors&#8217;, <strong>1</strong>);<br />
</span>troque o <strong>1</strong> por <strong>0</strong> (numero zero), assim:<br />
<span style="color:#0000ff;">ini_set(&#8216;display_errors&#8217;, <strong>0</strong>);<br />
</span>isto acaba com toda a anarquia!</p>
<p>Para encerrar, deixo claro que este poderá ser o único posto sobre o assunto, normalmente não estou prestando suportes sobre o dotProject.</p>
<p>Abraço</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ahaprogramando.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ahaprogramando.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ahaprogramando.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ahaprogramando.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/116/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=116&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2010/11/12/dotproject-aquietando-os-erros-warnings-e-deprecateds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
		<item>
		<title>Editor PHP gratuito Netbeans 6.8</title>
		<link>http://ahaprogramando.wordpress.com/2010/01/02/editor-php-gratuito-netbeans-6-8/</link>
		<comments>http://ahaprogramando.wordpress.com/2010/01/02/editor-php-gratuito-netbeans-6-8/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 23:20:06 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[DOJO]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Layout CSS]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[EDITOR CSS]]></category>
		<category><![CDATA[EDITOR HTML]]></category>
		<category><![CDATA[EDITOR JAVASCRIPT]]></category>
		<category><![CDATA[EDITOR PHP]]></category>
		<category><![CDATA[NETBEANS]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=90</guid>
		<description><![CDATA[Até a pouco tempo eu estava usando como ferramenta gratuita para edição WEB o APTANA. Que na versão 1.5 tinha bom suporte a PHP e Javascript. Todavia da versão 2.0 pra diante, o pessoal do APTANA abandonou o suporte nativo a PHP. Só percebi depois de desinstalar a versão 1.5 e instalar a 2.0. Temporariamente [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=90&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Até a pouco tempo eu estava usando como ferramenta gratuita para edição WEB o APTANA. Que na versão 1.5 tinha bom suporte a PHP e Javascript. Todavia da versão 2.0 pra diante, o pessoal do APTANA abandonou o suporte nativo a PHP. Só percebi depois de desinstalar a versão 1.5 e instalar a 2.0.</p>
<p>Temporariamente retomei a utilização do Dreamweaver 8 (não é gratuíto) e que apesar de ser uma versão desatualizada, continua com algumas opções mais completas que os editores gratuítos que temos à disposição.</p>
<p>Mas retomei minha busca por editores gratuitos, e fiquei surpreso com o Netbeans 6.8 customizado para PHP. Pra começar&#8230; o tamanho do arquivo de Download: 25MB contra os 135MB do Aptana 2.0. Eu disse míseros 25 Megalhões de Bytes! Veja com seus próprios olhos no site de Download: http://netbeans.org/downloads/index.html (na opção de download Netbeans para PHP).</p>
<p>De cara deu pra perceber que também não é tão pesado para abrir o programa, instalei-o em um note Intel Dualcore 1.8Ghz com 2GB de RAM e Windows Vista.  Para ser mais preciso&#8230; não abre tão rápido quanto o bloco de notas hahaha mas também perde para o Dreamweaver 8.</p>
<p><strong>Recursos encontrados:</strong></p>
<p><strong>Interface em Português</strong><br />
(dispensa comentários)</p>
<p><strong>Search e replace em todo o projeto </strong></p>
<p>Este é um recurso que me era muito útil no Dreamweaver, mas que não estava disponível no Aptana. Necessário quando vc quer modificar o nome de uma variável, função ou método que vc criou, e está sendo chamada em diversos arquivos. Talvez vc nem lembre todos os locais que será necessário modificar. Nesta hora a ferramenta detona.</p>
<p><a href="http://ahaprogramando.files.wordpress.com/2010/01/captura41.jpg"><img class="alignnone size-full wp-image-94" title="Alguns Recursos" src="http://ahaprogramando.files.wordpress.com/2010/01/captura41.jpg?w=450&#038;h=585" alt="" width="450" height="585" /></a></p>
<p><strong>Sugestão para comandos PHP e Javascript, incluíndo detalhes sobre as funções</strong></p>
<p>Este recurso é encontrado tanto no Dreamweaver quanto no Aptana. E o Netbens faz bonito.<br />
<a href="http://ahaprogramando.files.wordpress.com/2010/01/captura2.jpg"><img class="alignnone size-full wp-image-95" title="Help a comandos PHP" src="http://ahaprogramando.files.wordpress.com/2010/01/captura2.jpg?w=450&#038;h=542" alt="" width="450" height="542" /></a></p>
<p>O mesmo vale para Javascript, HTML e CSS.</p>
<p><strong>Localiza os métodos e atributos da Classe em que vc está trabalhando</strong><br />
Já trabalhei com java, e meu ambiente de trabalho era justamente o Netbeans. Apreciava o recurso oferecido por ele, em que dentro de uma classe vc pode digitar &#8220;this.&#8221; e ele suge os métodos e atributos disponíveis na classe.  Tal recurso está inteiramente disponível na versão do ambiente Netbeans para PHP.</p>
<p><a href="http://ahaprogramando.files.wordpress.com/2010/01/captura11.jpg"><img class="alignnone size-full wp-image-96" title="Atenção aos detalhes de seu código" src="http://ahaprogramando.files.wordpress.com/2010/01/captura11.jpg?w=450&#038;h=542" alt="" width="450" height="542" /></a></p>
<p>Perceba na figura acima, que ao selecionar um dos métodos de minha classe, ele apresenta inclusive a documentação do método. Claro&#8230; vc precisa seguir o padrão de documentação PHP, e informar antes de cada método seu propósito e parâmetros, como no exemplo abaixo:</p>
<p><a href="http://ahaprogramando.files.wordpress.com/2010/01/captura3.jpg"><img class="alignnone size-full wp-image-97" title="Documentação PHP" src="http://ahaprogramando.files.wordpress.com/2010/01/captura3.jpg?w=450&#038;h=192" alt="" width="450" height="192" /></a></p>
<p><strong>Suporte a TAGs HTML</strong></p>
<p>Vc pode escrever código HTML tranquilamente, que ele oferece sujestão para nomes das TAGs e também para os atributos. Se vc escrever a tag body como esta:  &lt;body style=&#8221;color: red &#8220;&gt;&lt;/body&gt;    pode localizar a propriedade style, e nos valores para o atributo, virão também automaticamente as sugstões de comandos CSS, como color e após selecionar este colocando dois pontos &#8220;:&#8221; será apresentada uma modesta lista de cores. Achei pobre a lista de cores neste caso, mas funciona amigavelmente.</p>
<p><strong>Suporte avançado a CSS</strong></p>
<p>Não utilizei o recurso ainda por tempo suficiente para afirmar que seja excelente, ou apontar possíveis defeitos. Porém percebi que possui recursos interessantes. Quando um arquivo &#8220;.css&#8221; é aberto, um painel é apresentado com ferramentas para manutenção dos parâmetros do CSS.</p>
<p>Mais detalhes na figura abaixo:</p>
<p><a href="http://ahaprogramando.files.wordpress.com/2010/01/captura5.jpg"><img class="alignnone size-full wp-image-98" title="Detalhes do painel de apoio a CSS" src="http://ahaprogramando.files.wordpress.com/2010/01/captura5.jpg?w=450&#038;h=311" alt="Figura com Detalhes do painel de apoio a CSS" width="450" height="311" /></a></p>
<p>Dá pra notar que ele mostra inclusive um exemplo de texto com a formatação a direita. Neste quesito o APTANA era o mais pobre&#8230; oferecia como grande recurso uma cubo de 216 cores para ajudar na escolha das cores para atributos CSS.</p>
<p><strong>Pontos Negativos</strong></p>
<p>1) Falta uma interface WYSIWYG para delinear interfaces HTML.  Aliás quanto a este recurso, dos programas que experimentei só o Dreamwever oferece algo realmente satisfatório. Sei que para o bom desenvolvedor, aquele que conhece os recursos de HTML e CSS, até não faz muita falta. Mas acho interessante por exemplo para preparar rapidamente uma página estática em HTML com textos e figuras. Principalmente para copiar com a formatação um texto que vc copia do Writer Open Office, ou no Office Word. Facilita também para colar uma lista de valores no HTML, pois com WYSIWYG é rapidinho e intuitivo preencher uma tabela.</p>
<p>2) [<span style="color:#0000ff;">Ponto de vista Pessoal</span>] Não oferece suporte nato a bibliotecas javascript mais conhecidas como Jquery e Dojo. Seria interessande em meio a um código JavaScript digitar &#8220;dojo.&#8221; e ele oferecer as opções da API Dojo. Talvez até haja uma forma de acrescentar um plugin de terceiros ou coisa parecida, investiguei superficialmente e não tive um resultados satisfatórios. Neste ponto o APTANA faz bonito e o Dreamweaver 8 também é isento.</p>
<p><strong>Conclusão</strong></p>
<p>Temos aí um editor WEB para PHP, HTML, JAVASCRIPT e CSS  de ótimo nível entre os da categoria FREEWARE, fácil de instalar, arquivo de Download relativamente pequeno, bons recursos. Vale a pena testar!</p>
<p><strong> </strong>Grande Abraço<strong><br />
</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ahaprogramando.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ahaprogramando.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ahaprogramando.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ahaprogramando.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=90&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2010/01/02/editor-php-gratuito-netbeans-6-8/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2010/01/captura41.jpg" medium="image">
			<media:title type="html">Alguns Recursos</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2010/01/captura2.jpg" medium="image">
			<media:title type="html">Help a comandos PHP</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2010/01/captura11.jpg" medium="image">
			<media:title type="html">Atenção aos detalhes de seu código</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2010/01/captura3.jpg" medium="image">
			<media:title type="html">Documentação PHP</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2010/01/captura5.jpg" medium="image">
			<media:title type="html">Detalhes do painel de apoio a CSS</media:title>
		</media:content>
	</item>
		<item>
		<title>Ajax – Enviar Conteúdo de Formulário via POST com DOJO</title>
		<link>http://ahaprogramando.wordpress.com/2009/04/27/ajax-enviar-conteudo-de-formulario-via-post-com-dojo/</link>
		<comments>http://ahaprogramando.wordpress.com/2009/04/27/ajax-enviar-conteudo-de-formulario-via-post-com-dojo/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 15:30:57 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[DOJO]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[assíncrono]]></category>
		<category><![CDATA[biblioteca Javascript]]></category>
		<category><![CDATA[DOJO toolkit]]></category>
		<category><![CDATA[innerHTML]]></category>
		<category><![CDATA[WIDGET DOJO]]></category>
		<category><![CDATA[WIDGETS DOJO]]></category>
		<category><![CDATA[xhrPost]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=75</guid>
		<description><![CDATA[Ajax (aquela maneira genial de atualizar conteúdo em uma página) tem sido a sensação nos últimos anos de desenvolvimento WEB. Lembro das minhas primeiras investidas na área em 2005, naquela época ainda um terreno desconhecido (pra mim) e bastante pedregoso. Anos mais tarde temos diversas ferramentas prontas e gratuitas para desenvolver tarefas em Ajax. Mas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=75&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p class="western" style="margin-bottom:0;" align="center">
<p class="western" style="margin-bottom:0;" align="center">
<p class="western" style="margin-bottom:0;" align="justify">Ajax (aquela maneira genial de atualizar conteúdo em uma página) tem sido a sensação nos últimos anos de desenvolvimento WEB. Lembro das minhas primeiras investidas na área em 2005, naquela época ainda um terreno desconhecido (pra mim) e bastante pedregoso. Anos mais tarde temos diversas ferramentas prontas e gratuitas para desenvolver tarefas em Ajax.<br />
Mas nem só para atualizar conteúdo na página serve o famigerado recurso, pois Ajax é como um portal na quarta dimensão que pode ser aberto no browser e que permite tráfego de dados nas duas direções [servidor &gt; cliente] e [cliente &gt; servidor]. No presente artigo vamos tratar do último caso: “como enviar dados de um formulário para o servidor sem recarregar a página toda após o envio?”</p>
<p class="western" style="margin-bottom:0;" align="justify">Nas minhas primeiras empreitadas nesta área vi que o terreno era árduo e acabei desistindo, mas a biblioteca dojo oferece uma solução com estilo.</p>
<p class="western" style="margin-bottom:0;" align="justify">Se vc ainda não conhece a biblioteca Javascript Dojo, recomendo uma olhada no artigo “Como funciona a biblioteca Javascript Dojo”, será de grande valia <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p class="western" style="margin-bottom:0;" align="justify">
<h2 class="western" style="margin-bottom:0;"><strong>Um pouco de Teoria</strong></h2>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify">Vejamos o que ocorre em uma situação de envio tradicional. Na figura 1, podemos identificar 2 arquivos principais, o da página index, ao qual foi incluso um formulário, e o arquivo que recebe os dados. Nestas circunstâncias o envio dos dados é definido simplesmente pelo atributo “action” da tag &lt;form&gt; e o método de envio (geralmente ”post”) é definido no atributo “method” da mesma tag. A tarefa é acionada quando o usuário clicar no botão definido pela tag &lt;submit&gt;.</p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify"><span style="color:#0000ff;">No protocolo HTTP, o browser envia alguma informação ao servidor, e este precisa retornar uma resposta ao browser.</span></p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify">
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify">No momento do envio, a página toda sai de cena, e o browser envia uma requisição via HTTP ao servidor, para que o arquivo recebe_dados.php entre em ação.</p>
<p class="western" style="margin-bottom:0;" align="justify">
<div id="attachment_77" class="wp-caption alignnone" style="width: 409px"><img class="size-full wp-image-77" title="Envio de dados via post pelo método tradicional." src="http://ahaprogramando.files.wordpress.com/2009/04/metodo_com_post_http2.png?w=450" alt="Figura 1 - Envio de dados via post pelo método tradicional"   /><p class="wp-caption-text">Figura 1 - Envio de dados via post pelo método tradicional</p></div>
<p class="western" style="margin-bottom:0;" align="justify">Este arquivo efetua as tarefas subseqüentes como gravar as informações no Banco de Dados, e após envia um cabeçalho (header) ao browser, com uma diretiva para que o browser peça ao servidor novamente o carregamento de index.php. A URL desta diretiva pode conter uma variável com a resposta dizendo “Ok tudo ocorreu bem!”, ou “Heitaaa, deu problema!”.</p>
<p class="western" style="margin-bottom:0;" align="justify">
<p class="western" style="margin-bottom:0;" align="justify">Ex do código:</p>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#000000;"><span style="font-family:Verdana,sans-serif;"><span style="font-size:x-small;">&lt;?<br />
//tarefas</span></span></span><span style="color:#000000;"><br />
…<span style="font-family:Verdana,sans-serif;"><span style="font-size:x-small;"><br />
//retorno<br />
header(“<span style="color:#c5000b;">location:index.php?resposta=</span>”.<span style="color:#008000;">$resposta</span>);<br />
?&gt;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="justify">Bom, este é o cenário tradicional que todo WEB designer com experiência de formulários conhece.</p>
<p class="western" style="margin-bottom:0;" align="justify">A proposta deste post (aqui post significa artigo do blog hahaha), como dito anteriormente, é utilizar Ajax para que a página não saia de cena enquanto os dados são enviados para recebe_dados.php.</p>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">Tenha em mente que Ajax é um método de transferência de dados todo manipulado via Javascript. </span></p>
<p class="western" style="margin-bottom:0;" align="justify">A <strong>figura 2</strong> ilustra o esquema que vamos utilizar com a API do Dojo, o xhrPost.</p>
<p class="western" style="margin-bottom:0;" align="justify">
<p class="western" style="margin-bottom:0;" align="justify">
<p class="western" style="margin-bottom:0;" align="justify">
<div id="attachment_78" class="wp-caption alignnone" style="width: 410px"><img class="size-full wp-image-78" title="Envio de dados com com dojo xhrPost, uma prática maneira de efetuar o envio via Ajax." src="http://ahaprogramando.files.wordpress.com/2009/04/metodo_com_xhrpost1.png?w=450" alt="Figura 2 - Envio de dados com dojo xhrPost"   /><p class="wp-caption-text">Figura 2 - Envio de dados com dojo xhrPost</p></div>
<p class="western" style="margin-bottom:0;" align="justify">Nesta figura procurei deixar claro que os dados contidos no Formulário agora pegam outro trajeto. Veja que agora, o xhrPost, dentro da própria página index.php é quem captura os dados contidos no formulário, e os envia para recebe_dados.php. Ele é uma espécie de agente atravessador que negocia a transferência dos dados, digamos&#8230; por debaixo dos panos, e ninguém vê que algo está indo para o servidor, pois index.php não sai de cena.</p>
<p class="western" style="margin-bottom:0;" align="justify">Assim, se faz necessário também uma modificação na forma do envio da resposta que recebe_dados.php deseja devolver a index.php. Veja que quem está em contado com o servidor neste momento não é o browser todo, mas apenas o objeto xhrPost, ele mesmo fica aguardando a resposta, a qual pode ser um outro HTML, ou um TEXTO qualquer. Mas não desejamos um simples texto, porém uma variável contendo um texto de resposta. Quando vc quer codificar variáveis com valores em um meio textual, geralmente se utiliza XML, JSON, CSV ou coisa parecida. Neste caso, o dojo oferece uma ferramenta simples para codificar as variáveis em JSON.</p>
<p class="western" style="margin-bottom:0;" align="justify">Quando o xhrPost recebe a resposta, ele a pode entregar para funções Javascript específicas que vão decodificar o resultado em JSON e por fim apresentar a mensagem na tela do usuário.</p>
<p class="western" style="margin-bottom:0;" align="justify">Enfim este é o efeito que desejamos. Vamos ás instruções?</p>
<p class="western" style="margin-bottom:0;" align="justify">
<h2 class="western" style="margin-bottom:0;font-weight:normal;">Material necessário:</h2>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify"><strong>Básico:</strong></p>
<ol>
<li>Arquivo 			HTML  com formulário básico ( index.php )</li>
<li>Arquivo 			para receber os dados e devolver uma resposta (recebe_dados.php)</li>
<li>Biblioteca 			Javascript Dojo (veja como instalar aqui mesmo no Ahã&#8230; Programando&#8230;:  <a title="Instalação da Biblioteca Dojo" href="http://ahaprogramando.wordpress.com/2009/04/26/instalacao-da-biblioteca-dojo/" target="_blank">instalacao-da-biblioteca-dojo</a>)</li>
</ol>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify"><span style="color:#000000;"><span style="font-family:Verdana,sans-serif;"><span style="font-size:x-small;"> </span></span></span></p>
<p class="western" style="margin-bottom:0;" align="justify"><strong>Ferramentas pertencentes ao dojo:</strong></p>
<ol>
<li>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">dijit.dijit</span> (layouts dojo)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">dijit.form.Button</span> (widget button)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">dojo.parser </span>(farejador que procura widgets no meio do 	HTML para ativar)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">xhrPost </span>(Api 	dojo para envio de dados via Ajax pelo método Post)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">tundra.css</span> (folha 	padrão da biblioteca dojo)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify">classe 	de conversão Json PHP (já 	vem de brinde com o Dojo)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify">alguns 	scripts adicionais pra organizar as coisas</p>
</li>
</ol>
<p class="western" style="margin-bottom:0;" align="justify">
<p class="western" style="margin-bottom:0;" align="justify">
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#000000;"><span style="font-family:Verdana,sans-serif;"><span style="font-size:small;"><strong>Mãos á obra:</strong></span></span></span></p>
<p class="western" style="margin-bottom:0;" align="justify">Nosso maior trabalho será com o arquivo index.php no qual precisamos adicionar as devidas funcionalidades do dojo.</p>
<p class="western" style="margin-bottom:0;" align="justify">Abaixo o código de index.php, desculpem a endentação que não é das melhores, por que foi adequada à largura disponível de área para textos do blog.</p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#000000;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#0000ff;">&lt;?</span><span style="color:#a31515;">php<br />
</span></span></span></span><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//charset<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#000000;">header</span><span style="color:#000099;">(</span><span style="color:#cc0000;">&#8220;Content-Type: text/html; charset=ISO-8859-1&#8243;</span><span style="color:#0000ff;">,</span><span style="color:#006600;">true</span><span style="color:#000099;">)</span><span style="color:#000000;">;</span> </span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//modifique aqui o caminho da url do dojo<br />
//em seu servidor<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#464600;"><strong>$DOJO_URL</strong></span><span style="color:#0000ff;">=</span><span style="color:#cc0000;">&#8220;http://localhost/dojo-release-1.3.0-src/&#8221;</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#0000ff;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">?&gt;</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#0000ff;"><br />
&lt;</span><span style="color:#a31515;">html</span> <span style="color:#ff0000;">xmlns</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;http://www.w3.org/1999/xhtml&#8221;&gt;<br />
&lt;</span><span style="color:#a31515;">head</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">title</span><span style="color:#0000ff;">&gt;</span><span style="color:#000000;">TESTE xhrPost</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">title</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">link<br />
</span><span style="color:#ffffff;">__</span><span style="color:#ff0000;">id</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;themeStyles&#8221;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#ff0000;">rel</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;stylesheet&#8221;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#ff0000;">href</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;&lt;?=$DOJO_URL;?&gt;dijit/themes/tundra/tundra.css&#8221;&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">script</span> <span style="color:#ff0000;">type</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;text/javascript&#8221;<br />
</span><span style="color:#ffffff;">_________</span><span style="color:#ff0000;">src</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;&lt;?=$DOJO_URL; ?&gt;dojo/dojo.js&#8221;<br />
</span><span style="color:#ffffff;">_________</span><span style="color:#ff0000;">djConfig</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;isDebug:false, parseOnLoad: true&#8221;<br />
</span><span style="color:#ffffff;">_________</span><span style="color:#ff0000;">charset</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;utf-8&#8243;&gt;&lt;/</span><span style="color:#a31515;">script</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">script</span> <span style="color:#ff0000;">type</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;text/javascript&#8221;</span> <span style="color:#ff0000;">charset</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;utf-8&#8243;&gt;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#008000;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span>//carrega layer  dijit para interfaces<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">require</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;dijit.dijit&#8221;</span><span style="color:#5c5c5c;">);</span> </span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#008000;">//botao do dojo p engatilhar o xhrPost<br />
</span><span style="color:#ffffff;">__</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">require</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;dijit.form.Button&#8221;</span><span style="color:#5c5c5c;">);</span><span style="color:#008000;"> </span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#008000;">//varre o HTML em busca de widgets dojo</span><span style="color:#ffffff;">__<br />
__</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">require</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;dojo.parser&#8221;</span><span style="color:#5c5c5c;">);</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"> </span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#008000;">//função [sendForm] para estabelecer o envio<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//dos dados via xhrPost. Esta função é executada<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//uma única vez quando a página é carregada, para<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//que seja estabelecida a comunicação entre o<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//FORM e o xhrPost, bem como colocar o gatilho<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//do xhrPost no botão “</span><span style="color:#005c00;">botao_submit_dojo</span><span style="color:#008000;">” que é um<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//widget Dojo. Não funfa com botões tradicionais.</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;"><strong>__</strong></span><span style="color:#0000c0;"><strong>function</strong></span> <span style="color:#000000;">sendForm</span><span style="color:#5c5c5c;">()</span> <span style="color:#5c5c5c;">{<br />
</span><span style="color:#ffffff;"><strong>___</strong></span><span style="color:#0000c0;"><strong>var</strong></span> <span style="color:#000000;">button</span> <span style="color:#5c5c5c;">=</span> <span style="color:#000000;">dijit</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">byId</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;botao_submit_dojo&#8221;</span><span style="color:#5c5c5c;">);<br />
</span><span style="color:#ffffff;">___</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">connect</span><span style="color:#5c5c5c;">(<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">button</span><span style="color:#5c5c5c;">,<br />
</span><span style="color:#ffffff;">____</span><span style="color:#005c00;">&#8220;onClick&#8221;</span><span style="color:#5c5c5c;">,<br />
</span><span style="color:#ffffff;"><strong>____</strong></span><span style="color:#0000c0;"><strong>function</strong></span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">event</span><span style="color:#5c5c5c;">){<br />
</span><span style="color:#ffffff;">_____</span><span style="color:#008000;">//para (stop) o evento submit original<br />
</span><span style="color:#ffffff;">_____</span><span style="color:#000000;">event</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">preventDefault</span><span style="color:#5c5c5c;">();<br />
</span><span style="color:#ffffff;">_____</span><span style="color:#000000;">event</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">stopPropagation</span><span style="color:#5c5c5c;">();<br />
</span><span style="color:#ffffff;"><strong>_____</strong></span><span style="color:#0000c0;"><strong>var</strong></span> <span style="color:#000000;">deferred</span> <span style="color:#5c5c5c;">=</span> <span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">xhrPost</span><span style="color:#5c5c5c;">({<br />
</span></span></span><span style="color:#008000;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">______</span>//”form_teste” – id do formulário HTML<br />
<span style="color:#ffffff;">______</span>//por este id o dojo localiza o FORM<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">______</span><span style="color:#000000;">form</span><span style="color:#5c5c5c;">:</span> <span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">byId</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;form_teste&#8221;</span><span style="color:#5c5c5c;">),<br />
</span><span style="color:#ffffff;">______</span><span style="color:#000000;">handleAs</span><span style="color:#5c5c5c;">:</span> <span style="color:#005c00;">&#8220;text&#8221;</span><span style="color:#5c5c5c;">,<br />
</span><span style="color:#ffffff;">______</span><span style="color:#000000;">load</span><span style="color:#5c5c5c;">:</span><span style="color:#000000;">resJsonOk</span><span style="color:#5c5c5c;">,<br />
</span><span style="color:#ffffff;">______</span><span style="color:#000000;">error</span><span style="color:#5c5c5c;">:</span><span style="color:#000000;">resJsonError<br />
</span><span style="color:#ffffff;">_____</span><span style="color:#5c5c5c;">});</span><span style="color:#008000;">//xhrPost<br />
</span><span style="color:#ffffff;">____</span><span style="color:#5c5c5c;">});</span><span style="color:#008000;">//function(event)<br />
</span><span style="color:#ffffff;">__</span><span style="color:#5c5c5c;">}</span><span style="color:#008000;">//function sendForm()</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"> </span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#008000;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span>//mensagem erro de comunicação com o servidor<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;"><strong>__</strong></span><span style="color:#0000c0;"><strong>function</strong></span><span style="color:#5c5c5c;"> </span><span style="color:#000000;">resJsonError</span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">data</span><span style="color:#5c5c5c;">,</span><span style="color:#000000;">ioArgs</span><span style="color:#5c5c5c;">){<br />
</span><span style="color:#ffffff;"><strong>___</strong></span><span style="color:#0000c0;"><strong>var</strong></span> <span style="color:#000000;">msg</span> <span style="color:#5c5c5c;">=</span> <span style="color:#005c00;">&#8216;Nenhuma resposta do servidor.&#8217;</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;"><strong>___</strong></span><span style="color:#0000c0;"><strong>if</strong></span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">data</span><span style="color:#5c5c5c;">)<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">msg</span> <span style="color:#5c5c5c;">+=</span> <span style="color:#005c00;">&#8216;Ocorreram os seguintes erros em &#8216;</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">msg</span> <span style="color:#5c5c5c;">+=</span> <span style="color:#005c00;">&#8216;&lt;b&gt;recebe_dados.php:&lt;/b&gt;&lt;br&gt; &#8216;</span> <span style="color:#5c5c5c;">+</span> <span style="color:#000000;">data</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">byId</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;ct_msgs&#8221;</span><span style="color:#5c5c5c;">).</span><span style="color:#000000;">innerHTML</span> <span style="color:#5c5c5c;">=</span> <span style="color:#000000;">msg</span><span style="color:#5c5c5c;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#5c5c5c;">}</span><span style="color:#008000;">//function resJsonError(&#8230;)<br />
</span></span></span><span style="color:#008000;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span>//recepção da MSG de retorno OK, recebe o conteúdo<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#008000;">//JSON devolvido do recebe_dados.php, e extrai as<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//variáveis (status e msg) com seus respectivos valores</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;"><strong>__</strong></span><span style="color:#0000c0;"><strong>function</strong></span><span style="color:#5c5c5c;"> </span><span style="color:#000000;">resJsonOk</span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">data</span><span style="color:#5c5c5c;">,</span><span style="color:#000000;">ioArgs</span><span style="color:#5c5c5c;">) {<br />
</span><span style="color:#ffffff;"><strong>___</strong></span><span style="color:#0000c0;"><strong>if</strong></span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">data</span><span style="color:#5c5c5c;">){<br />
</span><span style="color:#ffffff;"><strong>____</strong></span><span style="color:#0000c0;"><strong>var</strong></span> <span style="color:#000000;">d</span> <span style="color:#5c5c5c;">=</span> <span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">fromJson</span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">data</span><span style="color:#5c5c5c;">),<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">conteudo_msg</span> <span style="color:#5c5c5c;">=</span> <span style="color:#005c00;">&#8220;STATUS: ["</span><span style="color:#5c5c5c;">+</span><span style="color:#000000;">d</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">status</span><span style="color:#5c5c5c;">+</span><span style="color:#005c00;">"] &lt;br&gt;&#8221;</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">conteudo_msg</span> <span style="color:#5c5c5c;">+=</span> <span style="color:#000000;">d</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">msg</span> <span style="color:#5c5c5c;">+</span> <span style="color:#005c00;">&#8220;&lt;br&gt;&#8221;</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">byId</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;ct_msgs&#8221;</span><span style="color:#5c5c5c;">).</span><span style="color:#000000;">innerHTML</span> <span style="color:#5c5c5c;">=</span> <span style="color:#000000;">conteudo_msg</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#5c5c5c;">}</span><span style="color:#008000;">//if<br />
</span><span style="color:#ffffff;">__</span><span style="color:#5c5c5c;">}</span><span style="color:#008000;">//function resJsonOk(&#8230;)</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#ffffff;">__</span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#008000;">//executa sendForm quando a página for carregada<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">___</span><span style="color:#000000;">dojo.addOnLoad(sendForm);<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">script</span><span style="color:#0000ff;">&gt;<br />
&lt;/</span><span style="color:#a31515;">head</span><span style="color:#0000ff;">&gt;<br />
&lt;</span><span style="color:#a31515;">body</span> <span style="color:#ff0000;">class</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;tundra&#8221;&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">div</span> <span style="color:#ff0000;">id</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;ct_msgs&#8221;&gt;&lt;/</span><span style="color:#a31515;">div</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">div</span> <span style="color:#ff0000;">id</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;ct_geral&#8221;&gt;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">&lt;!&#8211;Abaixo um formulário simplório com&#8230; &#8211;&gt;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">&lt;!&#8211;as configurações tradicionais &#8211;&gt;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">form</span> <span style="color:#ff0000;">id</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;form_teste&#8221;</span> <span style="color:#ff0000;">method</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;post&#8221;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#ff0000;">action</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;recebe_dados.php&#8221;&gt;<br />
</span><span style="color:#ffffff;">__ </span><span style="color:#008000;">&lt;!&#8211;Tags de entrada de dados&#8230; &#8211;&gt;<br />
</span><span style="color:#ffffff;">__ </span><span style="color:#008000;">&lt;!&#8211;também tradicionais &#8211;&gt;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">label</span><span style="color:#0000ff;">&gt;</span><span style="color:#000000;">Nome:</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">label</span><span style="color:#0000ff;">&gt;</span><span style="color:#000000;">&amp;nbsp;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">input</span><span style="color:#ffffff;"> </span><span style="color:#ff0000;">type</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;text&#8221;</span> <span style="color:#ff0000;">name</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;txt_nome&#8221;</span> <span style="color:#0000ff;">/&gt;</span><span style="color:#000000;">&amp;nbsp;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">label</span><span style="color:#0000ff;">&gt;</span><span style="color:#000000;">Endere&amp;ccedil;o:</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">label</span><span style="color:#0000ff;">&gt;</span><span style="color:#000000;">&amp;nbsp;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">input</span> <span style="color:#ff0000;">type</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;text&#8221;</span> <span style="color:#ff0000;">name</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;txt_endereco&#8221;</span> <span style="color:#0000ff;">/&gt;</span><span style="color:#000000;">&amp;nbsp;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#008000;">&lt;!&#8211;botão especial, que é um WIDGET dojo &#8211;&gt;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">button</span> <span style="color:#ff0000;">dojoType</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;dijit.form.Button&#8221;<br />
</span><span style="color:#ffffff;">____</span><span style="color:#ff0000;">id</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;submitButton&#8221;&gt;</span><span style="color:#000000;">Enviar</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">button</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">form</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">div</span><span style="color:#0000ff;">&gt;<br />
&lt;/</span><span style="color:#a31515;">body</span><span style="color:#0000ff;">&gt;<br />
&lt;/</span><span style="color:#a31515;">html</span><span style="color:#0000ff;">&gt;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left">Abaixo o código para recebe_dados.php que será utilizado em nosso teste. O código está bem comentado, dispensando maiores&#8230; comentários hehehe.</p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#0000ff;">&lt;?</span><span style="color:#a31515;">php</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//endereço dojo no File System</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#464600;"><strong><br />
$DFS</strong></span><span style="color:#0000ff;">=</span><span style="color:#cc0000;">&#8220;c:/apache2.2/htdocs/dojo-release-1.3.0-src&#8221;</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//classe JSON PHP do dojo</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#006600;"><br />
require</span><span style="color:#000099;">(</span><span style="color:#464600;"><strong>$DFS</strong></span><span style="color:#0000ff;">.</span><span style="color:#cc0000;">&#8220;/dojo/tests/resources/JSON.php&#8221;</span><span style="color:#000099;">)</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">/*<br />
* Neste espaço poderiam haver tarefas para<br />
* salvar os dados em BD<br />
*<br />
*/</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#464600;">//monta uma string com os dados recebidos<strong><br />
$dr</strong></span> <span style="color:#0000ff;">=</span><span style="color:#cc0000;">&#8220;Dados recebidos:&#8221;</span><span style="color:#464600;">;<strong><br />
$dr</strong></span><span style="color:#0000ff;">.=</span><span style="color:#cc0000;">&#8221; ['nome': "</span><span style="color:#0000ff;">.</span><span style="color:#000000;">$_POST</span><span style="color:#0000ff;">[</span><span style="color:#cc0000;">"txt_nome"</span><span style="color:#0000ff;">].</span><span style="color:#cc0000;">&#8220;, &#8220;</span><span style="color:#464600;">;<strong><br />
$dr</strong></span><span style="color:#0000ff;">.=</span><span style="color:#cc0000;">&#8220;&#8216;endere&amp;ccedil;o&#8217;: &#8220;</span><span style="color:#0000ff;">.</span><span style="color:#000000;">$_POST</span><span style="color:#0000ff;">[</span><span style="color:#cc0000;">"txt_endereco"</span><span style="color:#0000ff;">]</span><span style="color:#464600;">;<strong><br />
$dr</strong></span><span style="color:#0000ff;">.=</span><span style="color:#cc0000;">&#8220;]&lt;br&gt;&#8221;</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//Prepara a resposta de retorno em JSON, para<br />
//cada variável a + adicionar um item no array<br />
//com o nome da variável e seu respectivo valor</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#464600;"><strong>$ar</strong></span> <span style="color:#0000ff;">=</span> <span style="color:#006600;">array</span><span style="color:#000099;">(</span><span style="color:#cc0000;">&#8216;status&#8217;</span> <span style="color:#0000ff;">=&gt;</span> <span style="color:#cc0000;">&#8220;ok&#8221;</span><span style="color:#0000ff;">,</span><span style="color:#cc0000;"><br />
<span style="color:#ffffff;">____________</span>&#8216;msg&#8217;</span> <span style="color:#0000ff;">=&gt;</span> <span style="color:#464600;"><strong>$dr</strong></span><span style="color:#000099;">)</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"> </span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//cria o objeto manipulador de JSON</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#464600;"><strong><br />
$json</strong></span> <span style="color:#0000ff;">=</span> <span style="color:#006600;">new</span> <span style="color:#000000;">Services_JSON</span><span style="color:#000099;">()</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//gera uma string com o conteúdo do vetor<br />
//codificado em JSON</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#0000ff;"><br />
echo</span> <span style="color:#464600;"><strong>$json</strong></span><span style="color:#0000ff;">-&gt;</span><span style="color:#000000;">encode</span><span style="color:#000099;">(</span><span style="color:#464600;"><strong>$ar</strong></span><span style="color:#000099;">)</span><span style="color:#000000;">;</span></span></span><span style="color:#0000ff;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><br />
?&gt;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left">Podemos observar que recebe_dados.php, efetua a simples tarefa de receber os dados enviados, e devolvê-los através de variáveis codificadas em Json. É claro que recebe_dados.php poderia efetuar muitas outras tarefas, como por exemplo: verificar a validade dos dados recebidos, gravá-los no banco de dados, analisar o status da gravação no banco e gerar uma resposta e devolver. Porém vamos primar pela simplicidade por que o foco de nosso estudo é o funcionamento do xhrPost. Uma vez efetuadas as tarefas, o array PHP com as variáveis de resposta é lançado para o método encode do objeto $json, o qual retorna uma string JSON. Sempre que um browser roda um arquivo no servidor, e este possui um echo ou equivalente, uma strig de texto é devolvida para o browser automaticamente, e esta é exibida na tela. Porém em nosso caso o solicitante não foi diretamente o browser, porém o agente xhrPost que o fez enviando dados para o arquivo recebe_dados.php, naturalmente xhrPost aguarda alguma string de retorno vinda deste arquivo, pelo protocolo HTTP (veja novamente a figura 2). Juntando tudo isto, a resposta recebida virá em JSON, como no exemplo abaixo:</p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left"><strong>Variáveis:</strong></p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left"><span style="color:#0000ff;">“status” = ok,<br />
“msg” = Dados recebidos: ['nome': Leonir, 'endereço': Rua Ah\u002e002e. Programando...!]</span></p>
<p><strong>String Json:</strong></p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left"><span style="color:#0000ff;">{&#8220;status&#8221;:&#8221;ok&#8221;,&#8221;msg&#8221;:&#8221;Dados recebidos: ['nome': Leonir, 'endereço': Rua Ah\u002e002e. Programando...!]&#8220;} </span></p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left">Salve index.php, e recebe_dados.php na mesma pasta, de forma que vc possa acessar index.php através de seu servidor local. Aí é só colocar para rodar, estes códigos estão funcionando perfeitamente, foram testados, e copiados diretamente do editor PHP e Javascript que utilizo o APTANA.</p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#ff0000;"><strong>Observação Importante:</strong></span> Ao copiar o código, e colar em seu editor substitua todas as aspas redigitando-as, ou através do search replace do editor. Isto devido ao fato que o wordpress substitui as aspas normais por umas mais bonitinhas porém inúteis, os interpretadores de código PHP e Javascript não as reconhecem.</p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left">É isto, experimente e deixe seu comentário.</p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left">Abraço e até o próximo post.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ahaprogramando.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ahaprogramando.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=75&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2009/04/27/ajax-enviar-conteudo-de-formulario-via-post-com-dojo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2009/04/metodo_com_post_http2.png" medium="image">
			<media:title type="html">Envio de dados via post pelo método tradicional.</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2009/04/metodo_com_xhrpost1.png" medium="image">
			<media:title type="html">Envio de dados com com dojo xhrPost, uma prática maneira de efetuar o envio via Ajax.</media:title>
		</media:content>
	</item>
		<item>
		<title>Instalação da Biblioteca Dojo</title>
		<link>http://ahaprogramando.wordpress.com/2009/04/26/instalacao-da-biblioteca-dojo/</link>
		<comments>http://ahaprogramando.wordpress.com/2009/04/26/instalacao-da-biblioteca-dojo/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 18:56:09 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[DOJO]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[biblioteca Javascript]]></category>
		<category><![CDATA[DOJO toolkit]]></category>
		<category><![CDATA[WIDGET DOJO]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=55</guid>
		<description><![CDATA[Tutorial prático sobre a instalação da biblioteca de farramentas Javascript Dojo.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=55&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify"><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } --></p>
<p><!-- 	 	 --></p>
<p align="justify"><!-- 	 	 --></p>
<p>Como frequentemente tenho escrito algum post direcionado a utilização das ferramentas dojo, decidi criar um tutorial enxuto dedicado apenas a instalação e testes do dojo. Posso adiantar que trata-se de uma tarefa muito simples!</p>
<p>O Dojo é um conjunto de ferramentas javascript (dojo toolkit &#8211; por conveniência em português  gosto de chamar biblioteca dojo) cheio de recursos para enriquecer a experiência do usuário. Sei que já falei sobre o assunto em outro post, mas vale a pena reforçar. Para encontrar o Dojo Toolkit acesse:</p>
<p align="justify"><a title="Acesso direto à area de downloads Dojo" href="http://www.dojotoolkit.org/downloads" target="_blank">http://www.dojotoolkit.org/downloads</a></p>
<p align="justify">localize o link &#8220;<strong>All Downloads</strong>&#8221; e acesse-o, a seguir escolha (bem no topo) o link &#8220;<strong>Download latest Stable Releaze x.x.x</strong>&#8221; (atualmente na versão 1.3.0, a qual adotaremos neste exemplo). Neste ponto vc irá se deparar com uma página abarrotada de links para download, que são diversas versões da biblioteca em compactações tar, zip, com os arquivos fontes já compactados pelo shrinksafe, outras com toda a bilbioteca com os arquivos fontes (abertos e comentados). Nos interessam apenas 2 downloads, a saber:</p>
<p align="justify"><strong>dojo-release-1.3.0-src.zip</strong> &#8211; versão totalmente aberta, na qual vem exemplos junto, e vc pode acessar o código fonte. É a ideal para suas experiências na máquina local onde vc desenvolve seus projetos. Tamanho: 22 M.Bytes (43 MBytes descompactado)</p>
<p><strong>dojo-release-1.3.0.zip</strong> &#8211; versão enxuta, sem exemplos e sem os comentários nos códigos. Ideal para fazer upload ao servidor. Tamanho: 3.4 MBytes ( 8,67  MBytes descompactado)</p>
<p>Baixe sua versão para desenvolvimento, e descompacte-a para a pasta do localhost (no meu servidor Apache a pasta fica em c:\Apache2.2\htdocs\, de forma que ao ter baixado e descompactado fica: C:\Apache2.2\htdocs\dojo-release-1.3.0-src.</p>
<h2><strong>Testando 1&#8230;2&#8230;3&#8230;</strong></h2>
<p align="justify">A partir daí vc pode se divertir com os exemplos que acompanham a biblioteca. É um show, tem até arte de computação gráfica direto no browser sem usar Flash. Puxa&#8230; se não fosse uma ferramenta gratuita eu cobraria do Dojo por frases como esta hahaha.</p>
<p align="justify">Para encontrar os exemplos, abra com o windows explorer a pasta raiz do dojo (dojo-release-1.3.0-src) e faça uma pesquisa por &#8220;test_*.html&#8221;. Uma lista com mais de 350 exemplos é apresentada nesta versão. Basta abrir o arquivo HTML.</p>
<p class="western" style="margin-bottom:0;text-align:justify;">
<div id="attachment_56" class="wp-caption alignnone" style="width: 510px"><span><span><span><img class="size-full wp-image-56" title="pesquisa_arquivos_test_dojo" src="http://ahaprogramando.files.wordpress.com/2009/04/pesquisa_arquivos_test_dojo.png?w=450" alt="Figura 1 - Pesquisando arquivos de teste"   /></span></span></span><p class="wp-caption-text">Figura 1 - Pesquisando arquivos de teste</p></div>
<p><!-- 	 	 --></p>
<p align="justify">Para abrir um deles clique (ex: test_Tooltip.html) e abra com o browser, o endereço: <strong>file:///C:/Apache2.2/htdocs/dojo-release-1.3.0-src/dijit/tests/test_Tooltip.html</strong> será apresentado. Substitua o caminho até <strong>htdocs </strong>pelo endereço do servidor <strong>http://localhost/dojo-release-1.3.0-src/dijit/tests/test_Tooltip.html</strong> e pronto o exemplo estará rodando certinho.</p>
<p class="western" style="margin-bottom:0;text-align:justify;">
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ahaprogramando.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ahaprogramando.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/55/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=55&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2009/04/26/instalacao-da-biblioteca-dojo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2009/04/pesquisa_arquivos_test_dojo.png" medium="image">
			<media:title type="html">pesquisa_arquivos_test_dojo</media:title>
		</media:content>
	</item>
		<item>
		<title>Passar array de PHP para Javascript, e de Javascript para PHP</title>
		<link>http://ahaprogramando.wordpress.com/2008/11/29/passar-array-de-php-para-javascript-e-de-javascript-para-php/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/11/29/passar-array-de-php-para-javascript-e-de-javascript-para-php/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 14:51:26 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[variáveis Javascript]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=33</guid>
		<description><![CDATA[Nenhum post deste blog fez tanto sucesso quanto: &#8220;Como passar valores do PHP para o Javascript e vice versa?&#8221;. Porém tenho recebido solicitações para informar como efetuar esta tarefa com um array de valores. Demorou mas a hora chegou! Em primeiro lugar precisamos ter em mente que array consta de uma coleção de dados em uma [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=33&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nenhum post deste blog fez tanto sucesso quanto: &#8220;Como passar valores do PHP para o Javascript e vice versa?&#8221;. Porém tenho recebido solicitações para informar como efetuar esta tarefa com um <strong>array</strong> de valores. Demorou mas a hora chegou!</p>
<p>Em primeiro lugar precisamos ter em mente que array consta de uma coleção de dados em uma única variável. E o acesso ao seu conteúdo é gerenciado pela ENGINE da linguagem, associando um endereço a cada item na memória do computador.  Não adianta em PHP por exemplo, dar um <strong>echo</strong> <span style="color:#008000;"><strong>$array_dados</strong></span> e esperar que todas as posições desta variável sejam mostradas, pois estamos falando de uma variável complexa, que possui um endereço específico para cada informação nela contida. Neste caso, para ver o conteúdo da variável, ou se faz uso de uma tradicional varredura com looping&#8217;s, ou de um recurso muito útil para debug quando há arrays envolvidos, o <span style="color:#0000ff;">print_r</span>(<span style="color:#008000;"><strong>$array_dados</strong></span>).</p>
<p><strong>Enviando um Array do PHP para um código JavaScript presente na página:<br />
</strong></p>
<p>Não vou me deter aqui nos fundamentos sobre PHP e Javascript, já que este assunto foi exaustivamente abordado em outros posts. Todavia para quem deseja conhecer mais sobre o comportamento destas linguagens em servidores e browsers visite estes posts:</p>
<p><a title="PHP ou Javascript? Qual a diferença?" href="http://ahaprogramando.wordpress.com/2008/04/05/php-ou-javascript-qual-a-diferenca/" target="_blank">PHP ou Javascript? Qual a diferença?</a></p>
<p><a title="Como passar valores do PHP para o Javascript e vice versa?" href="http://ahaprogramando.wordpress.com/2008/01/19/6/" target="_blank">Como passar valores do PHP para o Javascript e vice versa?</a></p>
<p><strong>Continuando&#8230;</strong></p>
<p>Não podemos esquecer portanto, que o trafego de dados via protocolo HTTP entre browser e servidor é sempre textual, e que enquanto o PHP está trabalhando no lado do servidor, o Javascript faz suas tarefas no cliente (browser). Logo se desejamos enviar o conteúdo de um array que está presente em um arquivo PHP, para um código em Javascript, este conteúdo precisa trafegar do servidor ao browser junto com o HTML e códigos javascript. Sendo assim é  necessário transformar o conteúdo deste array em uma string (lembre-se: via protocolo HTTP só trafega texto). Então, se o array possuir 10 itens endereçados de 0 a 9, basta construir uma string separando os elementos por algum caractere que nunca vá ser usado no conteúdo dos ítens. Por exemplo: se meu array tem 2 posições com o conteudo: <span style="color:#ff0000;">0</span><span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;tic-tac&#8221;</span>,<span style="color:#ff0000;">1</span><span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;bla-bla-bla&#8221;</span>, fica claro que não convém criar uma string com os 2 elementos separando-os por ífem <span style="color:#ff0000;">&#8220;-&#8221;</span>. Geralmente os desenvolvedores usam vírgula com o fim de separar os elementos. Particularmente prefiro o caractere pipe <span style="color:#ff0000;">&#8220;|&#8221;</span>, devido ao fato que este não consta nas regras da língua portuguesa para qualquer função, ocasionando que não estará presente em textos normais. Assim o resultado da string com elementos delimitados para um array com o conteúdo de 2 itens (<span style="color:#ff0000;">0</span><span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;tic-tac&#8221;</span>,<span style="color:#ff0000;">1</span><span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;bla-bla-bla&#8221;</span>) seria transformado em uma simples string:<br />
<span style="color:#ff0000;">&#8220;tic-tac|</span><span style="color:#ff0000;">bla-bla-bla&#8221;<span style="color:#000000;">.</span></span></p>
<p><strong>Ok, qual a melhor maneira de fazer isto ?</strong></p>
<p><span style="color:#ff0000;"><span style="color:#000000;">No manual do PHP encontramos:</span><span style="color:#000000;"><br />
<span style="color:#000080;"><strong><span style="color:#000080;">implode</span></strong><span style="color:#000080;"><br />
(PHP 4, PHP 5)</span></span></span></span></p>
<p><span style="color:#000080;"><strong>implode</strong> — Junta elementos de uma matriz em uma string</span></p>
<p><span style="color:#000080;">Descrição<br />
string implode ( string $agrupador, array $elementos )</span></p>
<p><span style="color:#000080;">Retorna uma string contendo os elementos da matriz na mesma ordem com uma ligação entre cada elemento.</span></p>
<p><span style="color:#ff0000;"><span style="color:#000000;">Beleza já sabemos como fazer o trabalho no PHP. Então mãos à obra: Suponhamos que nossa página pertence a uma loja (</span></span><span style="color:#ff0000;"><span style="color:#000000;">que por sinal oferece produtos bastante diversificados), e de alguma forma temos em PHP um array com a lista de produtos. E precisamos dispor esta lista em uma variável javascript, para que alguma tarefa seja feita em Javascript, poderia ser o preenchimento de um list por exemplo.</span></span></p>
<p>&lt;?<span style="color:#ff0000;"><strong>php<br />
</strong><span style="color:#888888;">//array com a lista de produtos</span></span><br />
<strong><span style="color:#008000;">$produtos</span></strong> = <span style="color:#0000ff;">array(</span><span style="color:#ff0000;">0</span> =&gt;<span style="color:#ff0000;">&#8220;relogio digital&#8221;</span>,<br />
<span style="color:#ff0000;">1</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;mouse&#8221;</span>,<br />
<span style="color:#ff0000;">2 </span><span style="color:#0000ff;">=&gt;</span>&#8220;<span style="color:#ff0000;">arame para cerca&#8221;</span>,<br />
<span style="color:#ff0000;">3</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;bateria de celular&#8221;</span>,<br />
<span style="color:#ff0000;">4</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;doce de abobora&#8221;</span>,<br />
<span style="color:#ff0000;">5</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;tv de plasma&#8221;</span>,<br />
<span style="color:#ff0000;">6</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;pacote de pregos&#8221;</span>,<br />
<span style="color:#ff0000;">7</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;peneu de caminhao&#8221;</span>,<br />
<span style="color:#ff0000;">8</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;polvora&#8221;</span>,<br />
<span style="color:#ff0000;">9</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;prato de porcelana&#8221;</span><span style="color:#0000ff;">)</span>;<br />
<span style="color:#808080;"><br />
//criando a string com a versátil função php implode</span><br />
<span style="color:#008000;"><strong>$string_array</strong></span> = <span style="color:#0000ff;">implode(</span><span style="color:#ff0000;">&#8220;|&#8221;</span>, <strong><span style="color:#008000;">$produtos</span></strong><span style="color:#0000ff;">)</span>;<br />
?&gt;</p>
<p>A essa altura um simples <strong>echo</strong> <span style="color:#ff0000;"><span style="color:#000000;"><span style="color:#008000;"><strong>$string_array</strong></span></span></span> mostraria o resultado. Agora precisamos fazer que a string seja recebida em uma variável javascript, muito simples, basta um &lt;?<span style="color:#ff0000;"><strong>php</strong></span> <strong>echo</strong> <span style="color:#008000;"><strong>$string_array</strong></span>; ?&gt; no meio do código Javascript. Ora, este é o mesmo método para enviar valores do PHP para o meio do HTML.</p>
<p>Depois disto esta string deve ser convertida em um array  Javascript. Uma consulta rápida:</p>
<p>Em JavaScript Bilbe 5th (Danny Goodman with Michael Morrison) encontramos a função:</p>
<p><span style="color:#000080;">string.split(“delimiterCharacter” [, limitInteger])<br />
Returns: Array of delimited items.<br />
Compatibility: WinIE4+, MacIE4+, NN3+, Moz1+, Safari1+, testei também no Chrome e funfa!!!</span></p>
<p>Aplicar é fácil (perceba que o código PHP de linhas atrás  e o que vem a seguir estão presentes no mesmo arquivo) :</p>
<p>&lt;script&gt;<br />
<span style="color:#808080;">//variáveis</span><br />
<span style="color:#333399;"><strong>var</strong></span> i, array_produtos, string_array;<br />
<span style="color:#808080;">//recebe a string com elementos separados, vindos do PHP</span><br />
string_array = <span style="color:#0000ff;">&#8220;</span>&lt;?<span style="color:#ff0000;"><strong>php</strong></span> <strong>echo</strong> <span style="color:#008000;"><strong>$string_array</strong></span>; ?&gt;<span style="color:#0000ff;">&#8220;</span>;<br />
<span style="color:#808080;">//transforma esta string em um array próprio do Javascript</span><br />
array_produtos = string_array.split<span style="color:#333399;"><strong>(</strong></span><span style="color:#0000ff;">&#8220;|&#8221;</span><strong><span style="color:#333399;">)</span></strong>;</p>
<p><span style="color:#808080;">//varre o array só pra mostrar que tá tudo ok</span><br />
<span style="color:#333399;"><strong>for</strong></span> <strong><span style="color:#333399;">(</span></strong>i <strong><span style="color:#333399;">in</span></strong> array_produtos<span style="color:#333399;"><strong>)</strong></span><br />
alert<span style="color:#333399;"><strong>(</strong></span>array_produtos<span style="color:#333399;"><strong>[</strong></span>i<strong><span style="color:#333399;">])</span></strong>;</p>
<p>&lt;/script&gt;</p>
<p><span style="color:#ff0000;"><span style="color:#000000;">Uma beleza não? E vice-versa também é possível? Vejamos:<br />
</span></span></p>
<p><span style="color:#ff0000;"><span style="color:#000000;">Agora se vc possui um array que está no código JavaScript e deseja enviar para o PHP a fins de salvamento em banco de dados e tal, segue a mesma forma: transformar array em string, e para envio segue a via ilustrada no post sobre troca de dados entre JavaScript e PHP.</span></span></p>
<p>Mais um Help na bíblia do Javascript:</p>
<p><span style="color:#ff0000;"><span style="color:#000000;"><span style="color:#000080;">array.join(separatorString)<br />
Returns: String of entries from the array delimited by the separatorString value.<br />
Compatibility: WinIE4+, MacIE4+, NN3+, Moz1+, Safari1+, no Chrome testei e tá blz!!</span></span></span></p>
<p><span style="color:#ff6600;">&lt;form method=<span style="color:#0000ff;">&#8220;post&#8221;</span> action=<span style="color:#0000ff;">&#8220;recebe.php&#8221;</span> &gt;<br />
&lt;input type=<span style="color:#0000ff;">&#8220;hidden&#8221;</span> id=&#8221;<span style="color:#0000ff;">send_string_array&#8221;</span> name=<span style="color:#0000ff;">&#8220;send_string_array&#8221;</span> value=<span style="color:#0000ff;">&#8220;&#8221;</span> /&gt;<br />
&lt;input type=<span style="color:#0000ff;">&#8220;submit&#8221;</span> value=<span style="color:#0000ff;">&#8220;Enviar&#8221;</span> /&gt;<br />
&lt;/form&gt; </span><br />
&lt;script&gt;<br />
<span style="color:#3366ff;">document</span>.getElementById(<span style="color:#0000ff;">&#8220;send_string_array&#8221;</span>).value = array_produtos.<span style="color:#3366ff;">join</span>(<span style="color:#0000ff;">&#8220;|&#8221;</span>);<br />
&lt;/script&gt;</p>
<p>Agora basta receber a string que será enviada via POST, e transformá-la em array:</p>
<p><span style="color:#000080;">No manual do PHP:</span></p>
<p><span style="color:#000080;">(PHP 4, PHP 5)</span></p>
<p><span style="color:#000080;">explode — Divide uma string em strings</span></p>
<p><span style="color:#000080;">Descrição<br />
array explode ( string $separator, string $string [, int $limit] )</span></p>
<p><span style="color:#000080;">Retorna uma matriz de strings, cada uma como substring de string formada pela divisão dela a partir de fronteiras presentes nela separator. Se limit está definido, a matriz retornada conterá o máximo de limit elementos com o último elemento contendo o resto da string.</span><br />
<span style="color:#000000;"><br />
Note que o código a seguir está em um arquivo separado, destinado a receber dados enviados por um fomulário, ou seja este é o recebe.php:</span></p>
<p>&lt;?</p>
<p><span style="color:#808080;">//transforma a string de itens separados em array</span><br />
<span style="color:#008000;"><strong>$array_produtos</strong></span> = <span style="color:#0000ff;">explode</span>(<span style="color:#ff0000;">&#8220;|&#8221;</span>, <span style="color:#0000ff;">$_POST</span>[<span style="color:#ff0000;">'send_string_array'</span>]);<br />
<span style="color:#808080;">//mostra o conteúdo do array</span><br />
<span style="color:#0000ff;">print_r</span>($array_produtos);</p>
<p>?&gt;</p>
<p>É isto, todo este código foi testado antes de escrever o POST.<br />
Grande Abraço.</p>
<p><span style="color:#0000ff;"><span style="color:#ff0000;"><strong>[</strong></span></span><span style="color:#0000ff;"><span style="color:#ff0000;"><span style="color:#ff0000;"><strong>15/01/2009 - Edição]  - Ao copiar trechos de código, dos posts do Ahã Programando, substitua todas as aspas redigitando-as. Pois o WordPress substitui as aspas originais por algumas que são inúteis em programação. E os testes acabam não funcionando, deixando os entusiastas da programação web frustrados. </strong></span><span style="color:#ff0000;"><strong><span style="color:#008000;">Não desista! Tente novamente <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
</span></strong></span></span><br />
Obs: O blog Ahaprogramando é informativo, e não tem responsabilidade em dar suporte a dúvidas relacionadas ou não ao conteúdo apresentado, encontrar bugs em arquivos do leitor, ou auxiliá-lo em projetos pessoais.</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ahaprogramando.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ahaprogramando.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/33/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=33&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/11/29/passar-array-de-php-para-javascript-e-de-javascript-para-php/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
		<item>
		<title>Galeria de Fotos LightBox com Dojo (sem escrever código js)</title>
		<link>http://ahaprogramando.wordpress.com/2008/09/13/javascript-e-lightbox-com-dojo/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/09/13/javascript-e-lightbox-com-dojo/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 15:44:38 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[DOJO]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Layout CSS]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[galeria de fotos]]></category>
		<category><![CDATA[lightbox]]></category>
		<category><![CDATA[navegador de fotos]]></category>
		<category><![CDATA[WIDGET DOJO]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=16</guid>
		<description><![CDATA[Tenho estado um pouco afastado dos desenvolvimentos WEB, por que em fevereiro deste ano mudei o foco do meu trabalho ao entrar na área de TI de uma empresa, mas agora tenho um laboratório de experiências para incrementar e colocar coisinhas &#8220;Jasvascriptáveis&#8221;, trata-se da página www.ligazimmermann.com.br . Como o próprio nome pode informar, o intuito [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=16&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Tenho estado um pouco afastado dos desenvolvimentos WEB, por que em fevereiro deste ano mudei o foco do meu trabalho ao entrar na área de TI de uma empresa, mas agora tenho um laboratório de experiências para incrementar e colocar coisinhas &#8220;Jasvascriptáveis&#8221;, trata-se da página <a title="www.ligazimmermann.com.br" href="www.ligazimmermann.com.br">www.ligazimmermann.com.br</a> . Como o próprio nome pode informar, o intuito do site é ser um informativo sobre a liga da família Zimmermann. Ok continuando com WEB development&#8230;  Se eu sonhasse a alguns anos atrás que um dia seria tão fácil colocar efeitos legais em um página de internet. Vibrava com o resultado de semanas de programação Javascript para adicionar um menu-pop up, ou fazer um sistema de ordenar fotos. Pois bem&#8230; hoje existe um recurso poderoso para fazer coisas &#8220;fantáhhhdicas&#8221; sem sequer escrever uma linha de Javascript. Volto (é claro&#8230;) a bater na tecla do Dojo, pois nesta semana adicionei na página de eventos (<a title="http://www.ligazimmermann.com.br/?imnu=2" href="http://www.ligazimmermann.com.br/?imnu=2">http://www.ligazimmermann.com.br/?imnu=2</a>) do site uma galeria de fotos usando uma das ferramentas presentes no Dojo: o widget LightBox . LightBox é uma forma de apresentar imagens em um quadro modal, ou seja, ele toma conta de toda a tela do browser e não permite que as demais áreas do site estejam acessíveis, e já incorpora controles de avanço e retrocesso do grupo de imagens.</p>
<p><a href="http://ahaprogramando.files.wordpress.com/2008/09/lightbox.jpg"><img class="aligncenter size-full wp-image-17" title="lightbox" src="http://ahaprogramando.files.wordpress.com/2008/09/lightbox.jpg?w=450" alt=""   /></a></p>
<p>O efeito é legal, porém não é o que mais me impressiona, o que causa realmente impacto para o WEB designer é a facilidade de adicionar este recurso. Precisamos lembrar que o Dojo é uma biblioteca Javascript gratuíta que tem como principal vantagem não precisar programar recursos básicos. Basta configurar os requisitos mínimos e adicionar tag&#8217;s HTML marcadas como pertencentes a algum utilitário (<strong>widget</strong>) Dojo, e ele fará o restante do trabalho encima destas tags.</p>
<p>No caso em questão, eu já tinha efetuado todas as configurações para que funcionassem os &#8220;Tooltips&#8221; na página. E para adicionar o widget &#8220;LightBox&#8221; basicamente precisei incluir 2 linhas, uma invocando o arquivo: Javascript &#8220;dojox/image/Lightbox.js&#8221; e outra para adicionar o CSS que deixa no LightBox tudo em seu lugar: &#8220;dojox/image/resources/image.css&#8221;.  Vamos ver aqui na íntegra todas as configurações que estão na página em questão.</p>
<h3>Analisando os ítens da receita&#8230;</h3>
<p>Na linha abaixo invoca o núcleo da biblioteca &#8220;dojo.js&#8221;, e configura pra não mostrar o debug na página (<span style="color:#0000ff;"><span class="attribute-value">isDebug:false</span></span>), e para que o Dojo procure por tag&#8217;s com Wigets ao carregar toda a página (<span style="color:#0000ff;"><span class="attribute-value">parseOnLoad: true</span></span>)</p>
<p>&lt;<strong><span style="color:#333399;"><span class="start-tag">script</span></span></strong><span class="attribute-name"> <strong>type</strong></span>=<span class="attribute-value"><span style="color:#0000ff;">&#8220;text/javascript&#8221;<br />
</span></span><strong><span class="attribute-name">src</span></strong>=<span class="attribute-value"><span style="color:#0000ff;">&#8220;/dojo-release-1.1.1/dojo/dojo.js&#8221;</span><br />
</span><span class="attribute-name"> <strong>djConfig</strong></span>=<span style="color:#0000ff;"><span class="attribute-value">&#8220;isDebug:false, parseOnLoad: true&#8221;</span></span>&gt;&lt;/<strong><span style="color:#333399;"><span class="end-tag">script</span></span></strong>&gt;</p>
<p>Agora devem ser especificadas configurações como os includes necessários e configuração da classe css que será utilizada, o Dojo possui algumas &#8220;skins&#8221; que vc pode escolher para modificar a aparência de seus widgets. No caso ficamos com &#8220;tundra&#8221;.</p>
<p>&lt;<strong><span style="color:#333399;"><span class="start-tag">script</span></span></strong><span class="attribute-name"> <strong>type</strong></span>=<span style="color:#0000ff;"><span class="attribute-value">&#8220;text/javascript&#8221;</span></span>&gt;<br />
<span style="color:#808080;">//aplica classe CSS &#8220;tundra&#8221; na TAG body do site </span><br />
dojo.addOnLoad(function(){dojo.addClass(dojo.body(),<span style="color:#0000ff;">&#8220;tundra&#8221;</span>);});<br />
dojo.require(&#8220;dijit.Tooltip&#8221;);<span style="color:#808080;">//include para o Tooltip</span><br />
dojo.require(&#8220;dojo.parser&#8221;);<span style="color:#808080;">//este deve estar sempre</span><br />
&lt;/<span style="color:#333399;"><strong><span class="end-tag">script</span></strong></span>&gt;</p>
<p>E como estamos falando do LightBox, aqui se adiciona o javascript da biblioteca que é responsável pelo recurso:</p>
<p>&lt;<strong><span style="color:#333399;"><span class="start-tag">script</span></span></strong><span class="attribute-name"> <strong>type</strong></span>=<span class="attribute-value"><span style="color:#0000ff;">&#8220;text/javascript&#8221;</span> </span><strong><span class="attribute-name"><br />
src</span></strong>=<span style="color:#0000ff;"><span class="attribute-value">&#8220;/dojo-release-1.1.1/dojox/image/Lightbox.js&#8221;</span></span>&gt;&lt;/<strong><span style="color:#333399;"><span class="end-tag">script</span></span></strong>&gt;</p>
<p>No que tange a Javascript até aqui tá concluído, agora vamos aos arquivos css básicos da página mais os que que pertencem ao dojo.  Ah e já falei sobre <strong>@import</strong> usado para linkar o arquivos css em outro artigo do Ahã&#8230; Programando&#8230;, é uma forma de carregar os arquivos CSS com um código mais limpo .</p>
<p>&lt;<strong><span style="color:#333399;"><span class="start-tag">style</span></span></strong><span class="attribute-name"> <strong>type</strong></span>=<span style="color:#0000ff;"><span class="attribute-value">&#8220;text/css&#8221;</span></span>&gt;<br />
@import url(<span style="color:#0000ff;">&#8220;/css/style.css&#8221;</span>);<br />
@import url(<span style="color:#0000ff;">&#8220;/dojo-release-1.1.1/dijit/themes/tundra/tundra.css&#8221;</span>);<br />
@import url(<span style="color:#0000ff;">&#8220;/dojo-release-1.1.1/dojo/resources/dojo.css&#8221;</span>);<br />
@import url(<span style="color:#0000ff;">&#8220;/dojo-release-1.1.1/dojox/image/resources/image.css&#8221;</span>);<br />
&lt;/<strong><span style="color:#333399;"><span class="end-tag">style</span></span></strong>&gt;</p>
<p>O último<strong> @import</strong> feito é para o CSS utilizado pelo widget LightBox.</p>
<p>Feitooo, agora temos todos os recursos prontos para serem utilizados, quantas linhas de código Javascript serão necessárias para adicionar as fotos? Nenhuma! Pera aê&#8230; não tem que criar os eventos onclick ou coisa parecida para navegar entre as fotos? Nope! Como escrevi em linhas atrás, o Dojo fará tudo por vc se ele encontrar um tag HTML que pertenca a um brinquedo dele (Widget). Assim fica fácil incluir quantas fotos forem necessárias e com um código HTML limpíssimo:</p>
<p>&lt;<strong><span style="color:#333399;">a</span></strong> <strong>href</strong>=<span style="color:#0000ff;">&#8220;fotos_ev2004/z2004f1.jpg&#8221;</span> <strong><br />
dojoType</strong>=<span style="color:#0000ff;">&#8220;dojox.image.Lightbox&#8221;</span> <strong><br />
group</strong>=<span style="color:#0000ff;">&#8220;group1&#8243;</span><br />
<strong>title</strong>=<span style="color:#0000ff;">&#8220;Entrada no Ginasi&amp;atilde;o&#8221;</span>&gt;Foto 1&lt;/<strong><span style="color:#333399;">a</span></strong>&gt;</p>
<h3>Tudo explicadinho nos mínimos detalhes&#8230;</h3>
<p>A tag &lt;<span style="color:#333399;"><strong>a</strong></span>&gt; é básica para links, o atributo <strong>href</strong> de um link tradicional recebe o endereço URL para o qual vc quer apontar. Mas aqui o novo atributo: <strong>dojoType</strong>,<strong> </strong>define que esta tag &lt;<strong><span style="color:#333399;">a</span></strong>&gt; deixa de ser uma tag tradicional para se tornar um widget Dojo, que em nosso caso será o da classe <span style="color:#0000ff;">&#8220;dojox.image.Lightbox<span style="color:#000000;">&#8220;.<br />
</span></span></p>
<p>O atributo <strong>group</strong> serve para indicar que a foto representada pela tag &lt;<strong><span style="color:#333399;">a</span></strong>&gt; pertence a um grupo, de forma que todas as fotos que pertencem a este devem ser identificadas com o mesmo nome de grupo. Assim se existirem na página 20 fotos em 2 grupos, ou seja  10 fotos para cada grupo,  o LightBox saberá que quando estiver navegando nas fotos do primeiro grupo não deverá invadir a lista de fotos do segundo grupo.</p>
<p>E por fim o atributo <strong>title</strong> onde deve ser especificado um comentário sobre a foto. Se quiser dá pra incrementar o visual e entre &lt;<strong><span style="color:#333399;">a</span></strong>&gt; e &lt;/<span style="color:#333399;"><strong>a</strong></span>&gt; colocar um &lt;<span style="color:#333399;"><strong>img</strong></span>&gt; com um thumb da foto, fica massa!</p>
<p>É isso&#8230; se quiser ver o LlightBox funcionando visite o link: <a title="http://www.ligazimmermann.com.br/?imnu=2" href="http://www.ligazimmermann.com.br/?imnu=2">http://www.ligazimmermann.com.br/?imnu=2</a></p>
<p>Reforcei aqui a idéia de que não precisa nem programar para usar a maioria dos widgets Dojo, mas quero deixar claro que não ignoro o fato de que o Dojo ofereça suporte a programação de recursos avançados.  O que é ótimo para quem quer tornar as coisas mais dinâmicas, tratando eventos, ligando widgets com outras funcionalidades&#8230; etc. Basta investigar e ver que o Dojo é forte nesta parte também, inclusive existe uma lista das classes da API Dojo que pode ser conhecida no link: <a title="http://api.dojotoolkit.org/jsdoc/dojo" href="http://api.dojotoolkit.org/jsdoc/dojo">http://api.dojotoolkit.org/jsdoc/dojo</a>.</p>
<p>Abraço e até o próximo artigo!</p>
<p><span style="color:#0000ff;"><strong><span style="color:#ff0000;">[</span></strong></span><span style="color:#0000ff;"><strong><span style="color:#ff0000;">15/01/2009 - Edição problema grave no wordpress]  - Ao copiar trechos de código, dos posts do Ahã Programando, substitua todas as aspas redigitando-as. Pois o WordPress substitui as aspas originais por algumas que são inúteis em programação. E os testes acabam não funcionando, deixando os entusiastas da programação web frustrados.  <span style="color:#008000;">Não desista! Tente novamente <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </span></span></strong><br />
</span><span id="more-16"></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ahaprogramando.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ahaprogramando.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=16&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/09/13/javascript-e-lightbox-com-dojo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2008/09/lightbox.jpg" medium="image">
			<media:title type="html">lightbox</media:title>
		</media:content>
	</item>
		<item>
		<title>Sessão / Sessões em PHP</title>
		<link>http://ahaprogramando.wordpress.com/2008/06/21/sessao-sessoes-em-php/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/06/21/sessao-sessoes-em-php/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 04:15:56 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[sessões]]></category>
		<category><![CDATA[sessões php]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=15</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=15&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>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: &#8220;sim ele está logado, e pode acessar esta página&#8221;.</p>
<p>Exemplo:</p>
<p>Para manipular sessoes no PHP:</p>
<p>arquivo1.php<br />
&lt;?<br />
session_start();<span style="color:#999999;">//inicializa o serviço da sessão<br />
</span><br />
<span style="color:#999999;">//cria uma variável do tipo sessão com a informação &#8220;sim&#8221;</span><br />
$_SESSION['esta_logado'] = &#8220;sim&#8221;;<br />
?&gt;</p>
<p>arquivo2.php<br />
&lt;?<br />
session_start();<span style="color:#999999;">//inicializa o serviço da sessão</span><br />
echo $_SESSION['esta_logado'];<span style="color:#999999;">//vai imprimir: &#8220;sim&#8221;</span></p>
<p>?&gt;<br />
Isto gera a ilusão de que a variável &#8220;esta_logado&#8221; foi passada de uma página para a outra, porém ela foi buscada da sessão no servidor. Simples, fácil&#8230; mas uma ferramenta útil e poderosa!</p>
<p>Até a próxima!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ahaprogramando.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ahaprogramando.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=15&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/06/21/sessao-sessoes-em-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
		<item>
		<title>PHP ou Javascript? Qual a diferença?</title>
		<link>http://ahaprogramando.wordpress.com/2008/04/05/php-ou-javascript-qual-a-diferenca/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/04/05/php-ou-javascript-qual-a-diferenca/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 03:15:46 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[javascript versus php]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=13</guid>
		<description><![CDATA[Em perguntas que tenho recebido de leitores do Ahã&#8230; Programando&#8230; 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 &#8211; Este tem as [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=13&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Em perguntas que tenho recebido de leitores do Ahã&#8230; Programando&#8230; 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.</p>
<p><strong>Em primeiro lugar vamos entender a internet:</strong></p>
<p>O browser &#8211; 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.</p>
<p>HTML &#8211; Hypertext Markup Language (linguagem de marcação de texto). Em sua essência o HTML é texto, só que com marcações denominadas TAG&#8217;s, delimitadas pelos caracteres &#8220;&lt;&#8221; e &#8220;&gt;&#8221;. 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.</p>
<p>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 &#8220;saber&#8221; 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.</p>
<p>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.</p>
<p>Por exemplo, veja o HTML a seguir:</p>
<p>&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;div id=&#8221;coisa&#8221;&gt;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>Supondo que se queira adicionar um texto qualquer dentro da div coisa utilizando Javascript, utilizaríamos a seguinte sintaxe:</p>
<p>&lt;script language=&#8221;javascript&#8221;&gt;<br />
var objeto_coisa = document.getElementById(&#8220;coisa&#8221;);<br />
objeto_coisa.innerHTML = &#8220;um texto qualquer&#8221;;<br />
&lt;/script&gt;</p>
<p><strong>Como isto funciona?</strong></p>
<p>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.</p>
<p>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 &#8220;.html&#8221; e testar, eu testei e funciona hehehe.</p>
<p><span style="color:#3366ff;"><strong>Javascript precisa de alguma instalação ?</strong></span><br />
Não, da mesma forma que um Navegador de Internet tem suporte a interpretação de HTML por natureza, o mesmo ocorre com a linguagem Javascript. É preciso porém verificar se o browser está com o Javascript ativado. Por alguma medida de segurança tomada o Javascript de seu navegador pode estar desativado, e aí não funciona.</p>
<p><strong>E o PHP como funciona?</strong></p>
<p>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&#8230;). 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.</p>
<p>Veja como ficaria o problema anterior resolvido com PHP:</p>
<p>&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;div id=&#8221;coisa&#8221;&gt;&lt;? echo &#8220;um texto qualquer&#8221;; ?&gt;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>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:</p>
<p>&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;div id=&#8221;coisa&#8221;&gt;um texto qualquer&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><span style="color:#3366ff;"><strong>PHP precisa Instalação?</strong></span><br />
Sim. E quando utilizado para fins de WEB, obviamente ele deve estar instalado em um servidor HTTP com suporte e PHP. Não significa que você não possa instalar e fazer suas experiências localmente. Existem pacotes como o WAMP, que com poucos cliques transformam sua máquina em um servidor local instalando Apache (servidor HTTP), PHP, MySQL (sistema gerenciador de Banco de Dados), PHPMyAdmin (front-end WEB para MySQL). Onde o endereço acessado para suas experiências WEB locais será http://localhost.</p>
<p><strong>Em resumo:</strong></p>
<p><strong><span style="color:#3366ff;">Javascript:</span></strong></p>
<p>1 &#8211; É interpretado e executado pelo browser, não pelo servidor.<br />
2 &#8211; Não trata o HTML como string, mas cada tag individualmente como um objeto que pode possuir métodos, propriedades (ou atributos) e eventos.</p>
<p>É 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).</p>
<p><strong><span style="color:#3366ff;">PHP:</span></strong></p>
<p>1 &#8211; É executado no servidor, e nada &#8220;sabe&#8221; 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.<br />
2 &#8211; Trata o HTML puramente como string (texto).</p>
<p>É 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.</p>
<p>É 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.</p>
<p>É isto&#8230; ahhh e se ainda não entende AJAX leia o post &#8220;Desmistificando o Temível Ajax&#8221;</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ahaprogramando.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ahaprogramando.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=13&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/04/05/php-ou-javascript-qual-a-diferenca/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
		<item>
		<title>Como funciona a bilblioteca JAVASCRIPT DOJO?</title>
		<link>http://ahaprogramando.wordpress.com/2008/02/04/como-funciona-a-bilblioteca-javascript-dojo/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/02/04/como-funciona-a-bilblioteca-javascript-dojo/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 19:30:16 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[DOJO]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[biblioteca Javascript]]></category>
		<category><![CDATA[DHTML]]></category>
		<category><![CDATA[DOJO toolkit]]></category>
		<category><![CDATA[interface em Javascript]]></category>
		<category><![CDATA[tab Container]]></category>
		<category><![CDATA[WIDGET]]></category>
		<category><![CDATA[WIDGET DOJO]]></category>
		<category><![CDATA[WIDGETS DOJO]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=9</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=9&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>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 <strong>utilitários (widgets)</strong> 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&#8230; Porém apenas posso comentar e dizer que é boa aquela que conheço e utilizo <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  .</p>
<p><strong>Legal&#8230; mas o que o dojo faz?</strong></p>
<p>Como dito anteriormente o dojo traz um cargamaço de <strong>widget</strong>&#8216;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 <strong>widget</strong> à página, com um código limpo, nada de misturanga de scripts e HTML.  A figura abaixo mostra um exemplo de <strong>widget</strong> 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.</p>
<p><a title="Exemplo de WIDGET DOJO com Abas" href="http://ahaprogramando.files.wordpress.com/2008/02/dojo1.png"><img src="http://ahaprogramando.files.wordpress.com/2008/02/dojo1.png?w=450" alt="Exemplo de WIDGET DOJO com Abas" /></a></p>
<p><strong><br />
</strong>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: <a href="http://ahaprogramando.wordpress.com/2008/01/27/desmistificando-o-temivel-ajax/">Desmistificando o temível AJAX!</a><strong>.</strong></p>
<p><strong>Usar o DOJO requer:<br />
</strong><br />
Download da biblioteca, existem várias opções  em <a title="Página de download da biblioteca dojo" href="http://dojotoolkit.org/downloads" target="_blank">http://dojotoolkit.org/downloads</a></p>
<p>As principais são a versão compacta, e a versão com os fontes (src). Sempre opto pela opção src, assim posso dar uma olhada nos fontes quando tenho dúvidas. Mas na hora de colocar no servidor, aí é claro que convém utilizar a versão compacta. Localize a última versão  em:</p>
<p>downloads &gt; All downloads &gt; Download latest Stable Release (1.2.3) &gt;</p>
<p>dojo-release-1.2.3-src.zip  [versão com fontes]</p>
<p>dojo-release-1.2.3.zip [versão sem fontes]</p>
<p>Nos exemplos acima considerei a versão 1.2.3, quando for atualizado óbviamente constará diferente disso.</p>
<p>A biblioteca pode ser descompactada em qualquer diretório do computador. Para quem já tem servidor instalado na máquina, recomendo extrair para htdocs ou www.</p>
<p>Uma vez &#8220;downloadeado&#8221;, 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 &#8220;.html&#8221;, e com nome iniciado por &#8220;test_&#8221;. Veja na <strong>figura 2</strong> 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.</p>
<p><img src="http://ahaprogramando.files.wordpress.com/2008/02/dojo2.jpg?w=450" alt="Figura 2" /></p>
<p>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.</p>
<p><strong>Na prática&#8230; ô parte boa!</strong></p>
<p>Para nosso estudo de um widget vou escolher o arquivo de exemplo &#8220;test_Tooltip.html&#8221;. Tooltip é o utilitário usado para criar aqueles balões estilosos que descrevem algum objeto presente na página.  Na <strong>figura 3 </strong>é 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.<br />
<img src="http://ahaprogramando.files.wordpress.com/2008/02/tooltip.gif?w=450" alt="figura 3" /></p>
<p>Examinando detalhadamente o arquivo &#8220;test_Tooltip.html&#8221; vamos encontrar no cabeçalho o seguinte script:</p>
<p><span style="color:#0000ff;"><span style="color:#ff0000;"><span style="color:#993300;">&lt;script type=&#8221;</span></span>text/javascript<span style="color:#993300;">&#8221; </span><span style="color:#993300;">src=&#8221;</span>../../dojo/dojo.js<span style="color:#993300;">&#8220;</span><br />
<span style="color:#993300;">djConfig=&#8221;</span>parseOnLoad: true, isDebug: false<span style="color:#993300;">&#8220;&gt;&lt;/script&gt;</span><br />
<span style="color:#993300;">&lt;script type=&#8221;</span>text/javascript<span style="color:#993300;">&#8221; src=&#8221;</span>_testCommon.js<span style="color:#993300;">&#8220;&gt;&lt;/script&gt;</span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;">&lt;script type=&#8221;</span>text/javascript<span style="color:#993300;">&#8220;&gt;</span><br />
<span style="color:#000000;"> dojo.require</span>(&#8220;dijit.Tooltip&#8221;);<br />
<span style="color:#000000;">dojo.require</span>(&#8220;dojo.parser&#8221;);<span style="color:#808080;">// find widgets</span></span></p>
<p><span style="color:#0000ff;"><span style="color:#000000;">dojo.addOnLoad</span><strong>(</strong><span style="color:#000000;"><strong>function</strong></span><strong>(){</strong><br />
<span style="color:#000000;">console.log</span><strong>(</strong>&#8220;on load func&#8221;<strong>)</strong>;<br />
<strong>var</strong> <span style="color:#000000;">tt</span> =<strong> new</strong> dijit.Tooltip<strong>({</strong>label:&#8221;programmatically created tooltip&#8221;,<br />
connectId:["programmaticTest"]<strong>})</strong>;<br />
<span style="color:#000000;"><strong>console.log</strong></span><strong>(</strong>&#8220;created&#8221;, tt, tt.id<strong>)</strong>;<br />
<strong>})</strong>;<br />
<span style="color:#993300;">&lt;/script&gt;</span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"><strong>Passo a passo:</strong></span></span></span></p>
<p><span style="color:#0000ff;"><span style="color:#ff0000;"><span style="color:#993300;">&lt;script type=&#8221;</span></span>text/javascript<span style="color:#993300;">&#8221; </span><span style="color:#993300;">src=&#8221;</span>../../dojo/dojo.js<span style="color:#993300;">&#8220;<span style="color:#000000;"><span style="color:#993300;"> </span></span></span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;">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.</span></span></span></p>
<p><span style="color:#0000ff;"> <span style="color:#993300;">djConfig=&#8221;</span>parseOnLoad: true, isDebug: false<span style="color:#993300;">&#8220;&gt;&lt;/script&gt;</span></span><br />
<span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"><span style="color:#993300;"><br />
<span style="color:#000000;">O atributo </span></span></span></span></span><span style="color:#000000;">djConfig recebe</span><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"><span style="color:#993300;"><span style="color:#000000;"><span style="color:#993300;"> c</span>onfigurações de comportamento que definem como o dojo vai interpretar este arquivo. O primeiro parâmetro<strong> parseOnLoad</strong> que é setado como true, informa que o dojo precisa &#8220;farejar&#8221; 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 <strong>isDebug, </strong>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 (<span style="color:#0000ff;">isDebug:false<span style="color:#000000;">), para evitar que ele fique aparecendo inconvenientemente ao público geral.</span></span></span><br />
</span></span></span></span></p>
<p><span style="color:#0000ff;"><br />
<span style="color:#993300;">&lt;script type=&#8221;</span>text/javascript<span style="color:#993300;">&#8221; src=&#8221;</span>_testCommon.js<span style="color:#993300;">&#8220;&gt;&lt;/script&gt;<br />
<span style="color:#000000;">Aqui trata-se de um script específico para o teste do tooltip.</span> </span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;">&lt;script type=&#8221;</span>text/javascript<span style="color:#993300;">&#8220;&gt;</span><br />
<span style="color:#000000;"> dojo.require</span>(&#8220;dijit.Tooltip&#8221;);<br />
</span><span style="color:#0000ff;"><span style="color:#000000;">dojo.require</span>(&#8220;dojo.parser&#8221;);<span style="color:#808080;">// find widgets</span></span></p>
<p>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 <span style="color:#0000ff;"><span style="color:#993300;">djConfig=&#8221;</span>parseOnLoad: true <span style="color:#000000;">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).</span></span></p>
<p>Até aqui foram vistos carregamentos de ferramentas básicas e suas configurações, agora começa um pouco de ação:</p>
<p><span style="color:#0000ff;"><span style="color:#000000;">dojo.addOnLoad</span><strong>(</strong><span style="color:#000000;"><strong>function</strong></span><strong>(){</strong><br />
<span style="color:#000000;">console.log</span><strong>(</strong>&#8220;on load func&#8221;<strong>)</strong>;<br />
</span><span style="color:#0000ff;"> </span><span style="color:#0000ff;"><strong>var</strong> <span style="color:#000000;">tt</span> =<strong> new</strong> dijit.Tooltip<strong>({</strong>label:&#8221;programmatically created tooltip&#8221;,<br />
</span><span style="color:#0000ff;"> </span><span style="color:#0000ff;"> connectId:["programmaticTest"]<strong>})</strong>;<br />
</span><span style="color:#0000ff;"> </span><span style="color:#0000ff;"><span style="color:#000000;"><strong>console.log</strong></span><strong>(</strong>&#8220;created&#8221;, tt, tt.id<strong>)</strong>;<br />
<strong>})</strong>;<br />
<span style="color:#993300;">&lt;/script&gt;</span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;">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 <strong>dojo.addOnLoad</strong>.  Com ela pode-se criar qualquer função dentro de addOnLoad que precise ser executada quando a página for carregada.  Experimente algo assim:</span></span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;">dojo.addOnLoad<strong><span style="color:#0000ff;">(</span>function<span style="color:#0000ff;">(){</span></strong> alert<span style="color:#0000ff;"><strong>(</strong></span><span style="color:#ff0000;">&#8220;oii&#8221;</span><strong><span style="color:#0000ff;">)</span></strong>; <strong><span style="color:#0000ff;">})</span></strong>;</span></span></span></p>
<p>Isto faria que<span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"> <strong>alert</strong><span style="color:#0000ff;"><strong>(</strong></span><span style="color:#ff0000;">&#8220;oii&#8221;</span><strong><span style="color:#0000ff;">) </span></strong><span style="color:#000000;">fosse executado assim que a página terminasse de ser carregada.</span></span></span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"><span style="color:#000000;"><strong>Agora o HTML dos WIDGET&#8217;S</strong>:</span></span></span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"><span style="color:#000000;"><span style="color:#0000ff;">&lt;input type=&#8221;input&#8221; id=&#8221;id1&#8243; value=&#8221;#1&#8243;&gt;<br />
&lt;span dojoType=&#8221;dijit.Tooltip&#8221; connectId=&#8221;id1&#8243;&gt;<span style="color:#000000;">tooltip para a caixa 1</span>&lt;/span&gt;<br />
</span></span></span></span></span><br />
A primeira tag &#8220;&lt;input&#8230;&#8221; é uma tag normal que, por exemplo, pode ser a entrada de dados para um formulário, observe que esta input é identificada pelo <strong>id</strong> &#8220;id1&#8243;.  Logo abaixo a tag &#8220;&lt;span&#8221; 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 (&#8220;tooltip para a caixa 1&#8243;) é o texto que irá aparecer dentro do balão tooltip, quando o mouse estiver sobre a caixa de texto <strong>id1. </strong>Por que as duas tags estão ligadas pela referência no atributo <strong>connectId</strong> da tag span.<strong> </strong>É 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&#8230;) aconteçam. Assim, se fossem atribuídos 10 tooltip&#8217;s para outras 10 tag&#8217;s input, nenhuma nova linha de javascript seria requerida para isto.</p>
<p>Bom, por hoje é só.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ahaprogramando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ahaprogramando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=9&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/02/04/como-funciona-a-bilblioteca-javascript-dojo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2008/02/dojo1.png" medium="image">
			<media:title type="html">Exemplo de WIDGET DOJO com Abas</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2008/02/dojo2.jpg" medium="image">
			<media:title type="html">Figura 2</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2008/02/tooltip.gif" medium="image">
			<media:title type="html">figura 3</media:title>
		</media:content>
	</item>
		<item>
		<title>Desmistificando o temível AJAX!</title>
		<link>http://ahaprogramando.wordpress.com/2008/01/27/desmistificando-o-temivel-ajax/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/01/27/desmistificando-o-temivel-ajax/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 20:40:03 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[assíncrono]]></category>
		<category><![CDATA[DHTML]]></category>
		<category><![CDATA[innerHTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[XMLHttpRequest]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=7</guid>
		<description><![CDATA[O termo AJAX não provém do latim &#8220;Acessarium Javascriptum Atloren Xmelum&#8221;, não, mas da expressão da língua inglesa &#8220;Asynchronous JavaScript And XML&#8221; ou Javascript e XML assíncronos. Um parêntesis teórico: Esta questão de atividade assíncrona está para Javascript assim com THREAD&#8217;S estão para JAVA. Ou seja, a execução assíncrona ocorre em um tempo diferente da [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=7&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>O termo AJAX não provém do latim &#8220;Acessarium Javascriptum Atloren Xmelum&#8221;, não, mas da expressão da língua inglesa &#8220;Asynchronous JavaScript And XML&#8221; ou Javascript e XML assíncronos.</p>
<p><strong>Um parêntesis teórico:</strong></p>
<p>Esta questão de atividade assíncrona está para Javascript assim com THREAD&#8217;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.</p>
<p><strong>O que realmente interessa, prática!<br />
</strong></p>
<p>Vamos partir de um layour HTML ultra básico:</p>
<p>&lt;div id=<span style="color:#0000ff;">&#8220;geral&#8221;</span>&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_menu&#8221;</span>&gt;&lt;/div&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_principal&#8221;</span>&gt;&lt;/div&gt;<br />
&lt;/div&gt;</p>
<p>Para incluir dados dinamicamente via PHP poderíamos proceder da maneira tradicional:</p>
<p>&lt;div id=<span style="color:#0000ff;">&#8220;geral&#8221;</span>&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_menu&#8221;</span>&gt;<br />
&lt;a href=<span style="color:#0000ff;">&#8220;index.php?arquivo=lista.php&#8221;</span>&gt;<br />
&lt;/div&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_principal&#8221;</span>&gt;<br />
<span style="color:#808080;">&lt;!&#8211; assim ao clicar no menu recarrega a página incluindo o arquivo que deve ser mostrado &#8211;&gt;</span><br />
<span style="color:#ff0000;">&lt;?php</span> include<span style="color:#0000ff;">(</span>$_GET<span style="color:#0000ff;">[</span><span style="color:#ff0000;">'arquivo'</span><span style="color:#0000ff;">])</span>; <span style="color:#ff0000;">?&gt;</span><br />
&lt;/div&gt;<br />
&lt;/div&gt;</p>
<p><strong>Tudo certo até aqui? </strong></p>
<p>Bom, existe uma maneira de se carregar um conteúdo para dentro da div &#8220;coluna_principal&#8221;, sem usar frames ou recarregar a página utilizando includes.</p>
<p>Trata-se da técnica entitulada de AJAX (Asynchronous JavaScript And XML). Serve basicamente para carregar dados (xml, html, texto) em uma página, abrindo um portal no &#8220;espaço tempo&#8221; do browser e indo buscar novo conteúdo no servidor, sem desfazer todo o HTML  que já tinha sido previamente carregado no browser, ao acessar a página.</p>
<p><strong>Um parêntesis de programação javascript:</strong></p>
<p>Em primeiro lugar, gostaria de explicar como funciona o atributo <strong>innerHTML</strong> do javascript. Atenção <strong>innerHTML</strong> 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 HTML podem ser referenciadas como um objeto (com métodos e atributos), ligado ao objeto principal <strong>document</strong>. Em PHP, porém, todas as tag&#8217;s são tratadas puramente como texto, basta fazer <strong>echo</strong> de alguma coisa no meio do html e tá realizado. Claro, isto por que o PHP faz a sua parte lá no servidor, e o servidor apenas tem interesse em fornecer TAG&#8217;s HTML, e não em interpretá-las. Já o Javascript, é  executado no browser, juntamente com o HTML. Logo, estando o HTML interpretado pelo browser, este HTML fica 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:</p>
<p><strong><span style="color:#0000ff;">var</span></strong> container <span style="color:#0000ff;">=</span> document.getElementById(<span style="color:#0000ff;">&#8216;coluna_principal&#8217;</span>);<br />
<span style="color:#808080;">//getElementById localiza um objeto no meio do html,<br />
//pelo seu ID, e retorna uma referência para este objeto.</span></p>
<p>Agora, a variável container se tornou um objeto com referência para a tag &#8220;coluna_principal&#8221;. E ele tem propriedades que podem ser acessadas a partir desta variável. Tipo, poderíamos descobrir que tag é esta:</p>
<p><span style="color:#666699;">alert</span><span style="color:#0000ff;">(</span>container.tagName<span style="color:#0000ff;">)</span>;<span style="color:#808080;"> //isto mostraria &#8220;div&#8221; , pois div é o nome da tag</span></p>
<p><span style="color:#808080;">//que é identificada pelo id &#8220;coluna_principal&#8221;.</span></p>
<p>Aqui é que entra o innerHTML.</p>
<p>container.innerHTML = <span style="color:#0000ff;">&#8220;&lt;br&gt; oi &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; bla bla bla&#8221;</span>;<br />
<span style="color:#808080;"><br />
//com isto o texto e o HTML entre aspas foram adicionados dentro da tag div com id &#8220;coluna_principal&#8221;.</span></p>
<p>Bom esta é a maneira de escrever um HTML novo dentro de uma tag já existente, de forma dinâmica (DHTML &#8211; Dynamic HTML).</p>
<p><strong>Então&#8230; como o Ajax funciona?</strong></p>
<p>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 (<em><span style="color:#0000ff;"><span style="color:#000000;">XMLHttpRequest</span></span></em>), que pode ser acessado através de funções Javascript para buscar no servidor um novo HTML ou XML.</p>
<p><span style="color:#ff0000;">&lt;script&gt;</span><br />
<span style="color:#808080;">//Tenta criar o objeto xmlhttp responsável por buscar os dados no servidor, são necessárias<br />
// 3 tentativas de criação do objeto por conta das discrepâncias de browsers microsoft</span><br />
<span style="color:#0000ff;"><strong>try {<br />
</strong><span style="color:#000000;">xmlhttp</span> =<strong> new</strong> <span style="color:#000000;">XMLHttpRequest</span>();<strong><br />
} catch(ee) {<br />
try{<br />
</strong><span style="color:#000000;">xmlhttp</span> = <strong>new</strong> <span style="color:#000000;">ActiveXObject</span>(&#8220;Msxml2.XMLHTTP&#8221;);<strong><br />
} catch(e) {<br />
try{<br />
</strong><span style="color:#000000;">xmlhttp</span> = <strong>new</strong> <span style="color:#000000;">ActiveXObject</span>(&#8220;Microsoft.XMLHTTP&#8221;);<strong><br />
} catch(E) {<br />
</strong><span style="color:#000000;">xmlhttp</span> = <strong>false</strong>;<strong><br />
}<br />
}<br />
}</strong><br />
</span><br />
<span style="color:#808080;"><br />
//a função de carregamento, recebe como parâmetro<br />
//_idConainer &#8211; id da tag onde será escrito o novo HTML que será buscado no servidor<br />
//_endereco &#8211; endereço da página que será buscada no servidor</span><br />
<strong>function</strong> carrega<span style="color:#000080;">(</span>_idContainer, _endereco<span style="color:#0000ff;">){ </span></p>
<p>xmlhttp.open<span style="color:#0000ff;">(&#8220;GET&#8221;</span>,_endereco,<span style="color:#0000ff;"><strong>true</strong>)</span>;<br />
xmlhttp.onreadystatechange=<strong>function</strong><span style="color:#0000ff;">() {</span></p>
<p><strong><span style="color:#0000ff;">if (</span></strong>xmlhttp.readyState==<span style="color:#ff0000;">4</span><span style="color:#0000ff;"><strong>){ </strong></span></p>
<p><span style="color:#808080;">//pega o resultado e filtra alguns caracteres absurdos</span><br />
retorno=xmlhttp.responseText;<br />
<span style="color:#808080;">//tag_container contem a referencia da tag que vai receber </span><br />
<strong><span style="color:#0000ff;">var</span></strong> tag_container = document.getElementById(_idContainer);<br />
<span style="color:#808080;">//escreve dentro da tag o novo HTML</span><br />
tag_container.innerHTML=retorno; <span style="color:#808080;">//olha o inner html aí</span></p>
<p><strong><span style="color:#0000ff;">}<br />
}</span></strong><br />
<span style="color:#808080;">//Executa</span><br />
xmlhttp.send(<strong>null</strong>)<br />
<strong><span style="color:#0000ff;">}</span></strong><br />
<span style="color:#ff0000;">&lt;/script&gt; </span></p>
<p>Pronto! Lembra daquele trecho básico de html?</p>
<p>&lt;div id=<span style="color:#0000ff;">&#8220;geral&#8221;</span>&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_menu&#8221;</span>&gt;&lt;/div&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_principal&#8221;</span>&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
Para inserir um conteúdo HTML, no div de id &#8220;coluna_principal&#8221;, 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:</p>
<p><span style="color:#0000ff;">&lt;script&gt;<br />
<span style="color:#000000;">carrega</span>(&#8216;coluna_principal&#8217;, &#8216;dados.php&#8217;);</span></p>
<p><span style="color:#0000ff;"><span style="color:#808080;">// ou se for o caso, a url completa:</span><br />
<span style="color:#000000;">carrega</span>(&#8216;coluna_principal&#8217;, &#8216;http://www.minhapagina.com/dados.php&#8217;);</span><br />
<span style="color:#ff0000;">&lt;/script&gt;<br />
</span></p>
<p>Quando <em>carrega</em> 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&#8230;</p>
<p><strong>E como fazer para um link ativar o carregamento de uma página usando AJAX?</strong></p>
<p>&lt;div id=<span style="color:#0000ff;">&#8220;geral&#8221;</span>&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_menu&#8221;</span>&gt;&lt;a href=<span style="color:#0000ff;">&#8220;javascript:carrega(&#8216;coluna_principal&#8217;, &#8216;dados.php&#8217;);&#8221;</span>&gt;acessar dados&lt;/a&gt;&lt;/div&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_principal&#8221;</span>&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
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.</p>
<p><span style="color:#ff0000;"><strong>[15/01/2009 - Edição problema grave no wordpress]  - Ao copiar trechos de código, dos posts do Ahã Programando, substitua todas as aspas redigitando-as. Pois o WordPress substitui as aspas originais por algumas que são inúteis em programação. E os testes acabam não funcionando, deixando os entusiastas da programação web frustrados.  <span style="color:#008000;">Não desista! Tente novamente <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </span></strong></span></p>
<p>Por hoje é só! E como prometido, quero dedicar este pequeno artigo à minha amiga Web Designer Cristina Otto, abração Cris!!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ahaprogramando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ahaprogramando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&amp;blog=2555891&amp;post=7&amp;subd=ahaprogramando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/01/27/desmistificando-o-temivel-ajax/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
	</channel>
</rss>
