<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!-- generator="wordpress/2.0.11" --><rss 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/" version="2.0">

<channel>
	<title>O Desenvolvedor PHP</title>
	<link>http://www.auriumsoft.com.br/desenvolvedorphp</link>
	<description>PHP, AJAX, Web 2.0, PostgreSQL, MySQL &amp; Afins.</description>
	<pubDate>Mon, 19 Apr 2010 20:28:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.11</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ODesenvolvedorPHP" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="odesenvolvedorphp" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Meu novo blog, Programador Prático</title>
		<link>http://www.auriumsoft.com.br/desenvolvedorphp/2010/meu-novo-blog-programador-pratico/</link>
		<comments>http://www.auriumsoft.com.br/desenvolvedorphp/2010/meu-novo-blog-programador-pratico/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 20:20:14 +0000</pubDate>
		<dc:creator>Alfred R. Baudisch</dc:creator>
		
		<category>Desenvolvimento Web</category>

		<category>Links</category>

		<guid isPermaLink="false">http://www.auriumsoft.com.br/desenvolvedorphp/2010/meu-novo-blog-programador-pratico/</guid>
		<description><![CDATA[Como estou numa nova jornada de desenvolvimento (Ruby e Ruby on Rails), e sempre estudo e escrevo sobre várias linguagens e tecnologias, esse blog sempre foi pequeno demais para mim. Eu mesmo criei uma limitação ao criá-lo apenas sobre PHP, não permitindo atualizações constantes.
Assim, criei ontem um novo blog, Programador Prático, onde pretendo postar com [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.auriumsoft.com.br/programadorpratico/"><img id="image14" src="http://www.auriumsoft.com.br/desenvolvedorphp/wp-content/uploads/2010/04/logo.png" alt="Programador Prático" align="left"/></a>Como estou numa <a href="http://www.auriumsoft.com.br/programadorpratico/2010/04/do-php-para-ruby-e-ruby-on-rails/">nova jornada de desenvolvimento</a> (Ruby e Ruby on Rails), e sempre estudo e escrevo sobre várias linguagens e tecnologias, esse blog sempre foi pequeno demais para mim. Eu mesmo criei uma limitação ao criá-lo apenas sobre PHP, não permitindo atualizações constantes.</p>
<p>Assim, criei ontem um novo blog, <strong><a href="http://www.auriumsoft.com.br/programadorpratico/">Programador Prático</a></strong>, onde pretendo postar com uma frequência quase diária, ao contrário desse, que foi quase anual!</p>
<p>Principais assuntos do Programador Prático:</p>
<ul>
<li>Ruby e Ruby on Rails</li>
<li>MAC OS X</li>
<li>Desenvolvimento web num todo (Javascript, SQL e noSQL, AJAX, etc)</li>
<li>Programação de jogos (em breve)</li>
<li>Agile</li>
<li>Livros, tutoriais e artigos relacionados</li>
</ul>
<p>Enfim, visite agora mesmo em <a href="http://www.auriumsoft.com.br/programadorpratico">www.auriumsoft.com.br/programadorpratico</a>!
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.auriumsoft.com.br/desenvolvedorphp/2010/meu-novo-blog-programador-pratico/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Apache + PHP 5 + MySQL + PostgreSQL no Mac OS X 10.6.2</title>
		<link>http://www.auriumsoft.com.br/desenvolvedorphp/2010/apache-php-5-mysql-postgresql-no-mac-os-x-1062/</link>
		<comments>http://www.auriumsoft.com.br/desenvolvedorphp/2010/apache-php-5-mysql-postgresql-no-mac-os-x-1062/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 00:11:18 +0000</pubDate>
		<dc:creator>Alfred R. Baudisch</dc:creator>
		
		<category>PHP</category>

		<category>Apache</category>

		<category>MySQL</category>

		<category>PostgreSQL</category>

		<category>Mac OS X</category>

		<guid isPermaLink="false">http://www.auriumsoft.com.br/desenvolvedorphp/2010/apache-php-5-mysql-postgresql-no-mac-os-x-1062/</guid>
		<description><![CDATA[Finalmente realizei um sonho: passei de Windows para MAC!
Porém, como tudo que é novo, as dificuldades surgiram, em especial uma que causa muita dor de cabeça em usuários do Windows, quem diria Mac (pelo menos como no meu caso, os &#8220;Mac switchers&#8221;): fazer funcionar um ambiente de desenvolvimento PHP.
O Leopard vem com Apache e PHP [...]]]></description>
			<content:encoded><![CDATA[<p>Finalmente realizei um sonho: passei de Windows para MAC!</p>
<p>Porém, como tudo que é novo, as dificuldades surgiram, em especial uma que causa muita dor de cabeça em usuários do Windows, quem diria Mac (pelo menos como no meu caso, os &#8220;Mac switchers&#8221;): fazer funcionar um ambiente de desenvolvimento PHP.</p>
<p>O Leopard vem com Apache e PHP 5 funcionais, inclusive com todas as extensões tradicionais (GD, Curl, MySQL, etc), o problema surgiu quando vi que não existia a extensão do PostgreSQL em nenhum lugar.</p>
<p>O fato é que essa<strong> instalação padrão do PHP tem que ser recompilada</strong>. Para quem a vida toda usou Windows, isso é algo totalmente novo*. Tentei, tentei, tentei e nada, não consegui fazer funcionar um novo PHP, mesmo seguindo mais de 5 artigos diferentes.</p>
<p>Até que me deparei com um <a href="http://2tbsp.com/content/install_apache_2_and_php_5_macports">artigo</a> que explica sobre a instalação da stack de desenvolvimento com <a href="http://www.macports.org/"><strong>MacPorts</strong></a>. <strong>BINGO!</strong></p>
<h2>Guia de Instalação</h2>
<p>O passo-a-passo da instalação.</p>
<ol>
<li> Download MacPorts: <a href="http://www.macports.org/install.php">http://www.macports.org/install.php</a></li>
<li> Após instalar, atualize o MacPorts:<br />
<code>sudo port -v selfupdate</code>
</li>
<li> Instale a stack de desenvolvimento (demora uns 10 minutos):<br />
<code>sudo port install php5 +apache2 +php5-mysql +php5-postgresql +php5-gd +php5-curl +php5-mcrypt +php5-gettext</code>
</li>
<li> Edite o httpd.conf que estará localizado em<br />
/opt/local/apache2/conf/httpd.conf</p>
<p>Adicionar as linhas nas seções correspondentes:<br />
<code>LoadModule php5_module modules/libphp5.so</code></p>
<p><code>DirectoryIndex index.html index.php</code></p>
<p><code>AddType application/x-httpd-php .php<br />
AddType application/x-httpd-php-source .phps<br />
</code><br />
Obs: Adicione, ironicamente, os Mime Type do PHP fora da condicional &lt;IfModule mime_module&gt;.
</li>
<li> Crie o php.ini<br />
<code>cp /opt/local/etc/php5/php.ini-development /opt/local/etc/php5/php.ini</code>
</li>
<li> Edite o php.ini, agora localizado em /opt/local/etc/php5</li>
<li> Aponte o diretório de extensões:<br />
<code>extension_dir = "/opt/local/lib/php/extensions/no-debug-non-zts-20090626/"</code>
</li>
<li> Adicione a lista de extensões:<br />
<code>extension=gd.so<br />
extension=mysql.so<br />
extension=mysqli.so<br />
extension=pdo_mysql.so<br />
extension=pdo_pgsql.so<br />
extension=pgsql.so<br />
extension=curl.so<br />
extension=mcrypt.so<br />
extension=gettext.so<br />
</code>
</li>
<li> Configure a Timezone:<br />
<code>date.timezone = 'America/Sao_Paulo'</code>
</li>
<li> Adicione o Apache ao startup:<br />
<code> sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist</code>
</li>
<li> Baixe e instale o package do PostgreSQL: <a href="http://www.postgresql.org/download/macosx">http://www.postgresql.org/download/macosx</a>
</li>
<li> Baixe e instale o package do MySQL: <a href="http://dev.mysql.com/downloads/mysql/">http://dev.mysql.com/downloads/mysql/</a>. O usuário padrão da instalação será <em>root</em> e nenhuma senha.
</li>
<li>Reinicie o Apache:<code>cd /opt/local/apache2/bin/<br />
sudo ./apachectl restart</code>
</ol>
<p><strong>Fontes:</strong></p>
<ul>
<li><a href="http://2tbsp.com/content/install_apache_2_and_php_5_macports">http://2tbsp.com/content/install_apache_2_and_php_5_macports</a></li>
<li><a href="http://drupal.org/node/68133">http://drupal.org/node/68133</a></li>
<li><a href="http://www.macports.org/install.php">http://www.macports.org/install.php</a></li>
<li><a href="http://www.tech-recipes.com/rx/2621/os_x_change_path_environment_variable/">http://www.tech-recipes.com/rx/2621/os_x_change_path_environment_variable/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.auriumsoft.com.br/desenvolvedorphp/2010/apache-php-5-mysql-postgresql-no-mac-os-x-1062/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Instalação de Apache 2, PHP 5 e MySQL 5 em menos de 5 minutos com WampServer!</title>
		<link>http://www.auriumsoft.com.br/desenvolvedorphp/2008/apache-2-php-5-e-mysql-5-em-menos-de-5-minutos-com-wampserver/</link>
		<comments>http://www.auriumsoft.com.br/desenvolvedorphp/2008/apache-2-php-5-e-mysql-5-em-menos-de-5-minutos-com-wampserver/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 18:03:03 +0000</pubDate>
		<dc:creator>Alfred R. Baudisch</dc:creator>
		
		<category>PHP</category>

		<category>Apache</category>

		<category>MySQL</category>

		<guid isPermaLink="false">http://www.auriumsoft.com.br/desenvolvedorphp/2008/apache-2-php-5-e-mysql-5-em-menos-de-5-minutos-com-wampserver/</guid>
		<description><![CDATA[Apesar de meu artigo da instalação do &#8220;kit web&#8221; em Windows estar todos esses anos no ar, o pessoal continua tendo muitas dúvidas e problemas (às vezes se esquecer de colocar um ponto e vírgula, a instalação do servidor já falha totalmente, então por isso ocorrem tantas dúvidas), está na hora de um jeito mais [...]]]></description>
			<content:encoded><![CDATA[<p>Apesar <a href="http://www.auriumsoft.com.br/desenvolvedorphp/2007/tira-duvidas-instalando-apache-2-php-5-e-mysql-no-windows/">de meu artigo</a> da instalação do &#8220;kit web&#8221; em Windows estar todos esses anos no ar, o pessoal continua tendo muitas dúvidas e problemas (às vezes se esquecer de colocar um ponto e vírgula, a instalação do servidor já falha totalmente, então por isso ocorrem tantas dúvidas), está na hora de um jeito mais simplificado.</p>
<p>Procurei bastante e achei! É um programa mágico chamado WampServer! Basta efetuar o download dele, instalar e você terá funcionando:<br />
<strong>APACHE 2.2.6, PHP 5.2.6 and PECL, MYSQL 5.0.45, PHPMYADMIN 2.11.2.1, SQLITEMANAGER 1.2.0</strong>!</p>
<p>Resolvi apagar o Apache, PHP e MySQL do meu computador e testar o WampServer para ver se é verdade.<br />
E é sim! <strong>Gastei em média 4 minutos para efetuar o download, e executar a instalação</strong>.</p>
<p>Para o download: <a href="http://www.wampserver.com/en/download.php" target="_blank">http://www.wampserver.com/en/download.php</a></p>
<p>Fora que ele fornece uma interface bem amigável para controle dos serviços, individualmente:<br />
<img id="image10" src="http://www.auriumsoft.com.br/desenvolvedorphp/wp-content/uploads/2008/10/image_menu_wamp.gif" alt="WampServer" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.auriumsoft.com.br/desenvolvedorphp/2008/apache-2-php-5-e-mysql-5-em-menos-de-5-minutos-com-wampserver/feed/</wfw:commentRss>
		</item>
		<item>
		<title>250+ sites imperdíveis para desenvolvedores Web</title>
		<link>http://www.auriumsoft.com.br/desenvolvedorphp/2007/250-sites-imperdiveis-para-desenvolvedores-web/</link>
		<comments>http://www.auriumsoft.com.br/desenvolvedorphp/2007/250-sites-imperdiveis-para-desenvolvedores-web/#comments</comments>
		<pubDate>Mon, 29 Oct 2007 01:08:00 +0000</pubDate>
		<dc:creator>Alfred R. Baudisch</dc:creator>
		
		<category>Desenvolvimento Web</category>

		<category>Links</category>

		<guid isPermaLink="false">http://www.auriumsoft.com.br/desenvolvedorphp/2007/250-sites-imperdiveis-para-desenvolvedores-web/</guid>
		<description><![CDATA[Confira nesse artigo mais de 250 indicações de sites úteis para desenvolvedores Web, dentre as categorias:
AJAX, PHP, MySQL, Java, CSS, Webstandards, Flash, Action Script, etc.
Vale a pena conferir. Estou há 8 anos na área e conheci ali ferramentas que nunca tinha ouvido falar antes e que poderiam me economizar tempo em várias tarefas.

]]></description>
			<content:encoded><![CDATA[<p>Confira <a href="http://mashable.com/2007/10/14/web-coding/" target="_blank">nesse artigo</a> mais de 250 indicações de sites úteis para desenvolvedores Web, dentre as categorias:<br />
AJAX, PHP, MySQL, Java, CSS, Webstandards, Flash, Action Script, etc.</p>
<p>Vale a pena conferir. Estou há 8 anos na área e conheci ali ferramentas que nunca tinha ouvido falar antes e que poderiam me economizar tempo em várias tarefas.
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.auriumsoft.com.br/desenvolvedorphp/2007/250-sites-imperdiveis-para-desenvolvedores-web/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Nuvem de Tags em PHP</title>
		<link>http://www.auriumsoft.com.br/desenvolvedorphp/2007/nuvem-de-tags-com-php/</link>
		<comments>http://www.auriumsoft.com.br/desenvolvedorphp/2007/nuvem-de-tags-com-php/#comments</comments>
		<pubDate>Mon, 22 Oct 2007 19:53:04 +0000</pubDate>
		<dc:creator>Alfred R. Baudisch</dc:creator>
		
		<category>PHP</category>

		<category>Script PHP</category>

		<category>Classe PHP</category>

		<guid isPermaLink="false">http://www.auriumsoft.com.br/desenvolvedorphp/2007/nuvem-de-tags-com-php/</guid>
		<description><![CDATA[O novo modo de catalogar textos &#233; baseado em tags (palavras, categorias), que por sua vez elas s&#227;o exibidas em &#34;nuvens&#34;, onde as palavras com maior freq&#252;&#234;ncia aparecem com fonte maior, e assim a fonte vai diminuindo, de acordo com a freq&#252;&#234;ncia de artigos com tal tag, exemplo (nuvem de tags do BlogBlogs):

Nessa nuvem de [...]]]></description>
			<content:encoded><![CDATA[<p>O novo modo de catalogar textos &eacute; baseado em tags (palavras, categorias), que por sua vez elas s&atilde;o exibidas em &quot;nuvens&quot;, onde as palavras com maior freq&uuml;&ecirc;ncia aparecem com fonte maior, e assim a fonte vai diminuindo, de acordo com a freq&uuml;&ecirc;ncia de artigos com tal tag, exemplo (nuvem de tags do <a href="http://www.blogblogs.com.br" target="_blank">BlogBlogs</a>):<br />
<img src="http://www.auriumsoft.com.br/desenvolvedorphp/arquivos/imagens/NuvemTags.GIF" alt="Nuvem de Tags do BlogBlogs" /></p>
<p>Nessa nuvem de tags (ou <em>cloud tags</em>, em inglês) existem mais textos &quot;taggado&quot; com <em>curiosidades</em>, depois com <em>bloppers</em> e assim vai. </p>
<p>  Vamos criar uma nuvem de tags bem b&aacute;sica, que retorna as palavras de modo aleat&oacute;rio (n&atilde;o organizada por nome ou freq&uuml;&ecirc;ncia). Primeiramente obtenha os c&oacute;digos e depois explica&ccedil;&atilde;o passo a passo:<a id="more-8"></a></p>
<p><strong>- <a href="http://www.auriumsoft.com.br/desenvolvedorphp/arquivos/artigos/class.nuvemtags.phps" target="_blank">class.nuvemtags.php</a></strong><br />
<strong>- <a href="http://www.auriumsoft.com.br/desenvolvedorphp/arquivos/artigos/nuvemExemplo.phps" target="_blank">nuvemExemplo.php</a></strong></p>
<p>Veja o exemplo <a href="http://desenvolvedorphp.auriummobile.com/artigos/nuvemtags/nuvemExemplo.php" target="_blank">em execução</a>. </p>
<p><strong>Dissecando o c&oacute;digo: </strong></p>
<ol>
<li>Devemos criar uma fun&ccedil;&atilde;o para adicionar palavras &agrave; biblioteca. addPalavra serve para isso, e aceita uma string ou array de palavras. O nosso &quot;banco de dados&quot; de palavra fica no membro $listaPalavras.<br />
<br />
  Cada palavra adicionada recebe um ponto (<code>$this-&gt;listaPalavras[$palavras]++;</code>), que &eacute; somado a cada apari&ccedil;&atilde;o dela. Os &quot;pontos&quot; nada mais s&atilde;o que a quantidade de vezes que a palavra aparece. </li>
<li>O modo como cada palavra ser&aacute; exibida de um tamanho &eacute; baseado no percentual. De acordo com o percentual ele recebe  um n&uacute;mero de classifica&ccedil;&atilde;o. Esse n&uacute;mero, pode ser usado como classe CSS.
<p>	<code>if($pecentualUso &gt;= 99)<br />
&nbsp;&nbsp;&nbsp;$classe = 10;<br />
else {<br />
&nbsp;&nbsp;&nbsp;$classe = floor(($percentualUso / 10));<br />
}</code></p>
<p>  Nesse caso o n&uacute;mero &eacute; obtido da seguinte maneira: caso a palavra apare&ccedil;a 99% ou mais, ela recebe classifica&ccedil;&atilde;o 10. Caso receba entre 1 e 98%, a classifica&ccedil;&atilde;o &eacute; o valor da dezena do percentual. Como assim?<br />
  Digamos que o percentual seja 32%. O retorno ser&aacute; 3. Caso seja 7%, o retorno &eacute; 0 (n&atilde;o tem dezena).</p>
<p>  E o que voc&ecirc; faz com esse n&uacute;mero? Crie classes CSS contendo esses n&uacute;meros, conforme coloquei em <strong>nuvemExemplo.php</strong>:<br />
  .tag10 cont&eacute;m o maior tamanho de fonte, tag9 um pouco menor e assim de modo decrescente, at&eacute; chegar em tag0. </li>
<li><code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 119, 0);">function&nbsp;</span><span style="color: rgb(0, 0, 187);">misturaPalavras</span><span style="color: rgb(0, 119, 0);">()</span><span style="color: rgb(0, 119, 0);"><br />
  </span></span></code>Coloca as palavras de modo aleat&oacute;rio no array. Como dito no come&ccedil;o do artigo, essa &eacute; uma nuvem de exibi&ccedil;&atilde;o aleat&oacute;ria.</li>
<li>E finalmente, a fun&ccedil;&atilde;o de retorno da nuvem: mostraNuvem().
<p>  Como cada palavra cont&eacute;m a soma de vezes que aparece, obtemos a quantidade total das vezes que as palavras aparecem: <code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);">$quantidadePresencas&nbsp;</span><span style="color: rgb(0, 119, 0);">=&nbsp;</span><span style="color: rgb(0, 0, 187);">array_sum</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">$this</span><span style="color: rgb(0, 119, 0);">-&gt;</span><span style="color: rgb(0, 0, 187);">listaPalavras</span><span style="color: rgb(0, 119, 0);">); </span></span></code>. Lembrando que array_sum soma todos os elementos de um array. Depois as palavras s&atilde;o misturadas: <code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 119, 0);"></span><span style="color: rgb(0, 0, 187);">$this</span><span style="color: rgb(0, 119, 0);">-&gt;</span><span style="color: rgb(0, 0, 187);">misturaPalavras</span><span style="color: rgb(0, 119, 0);">(); </span></span></code>.</p>
<p>    E entramos no loop de cria&ccedil;&atilde;o da nuvem:<br />
    <code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 119, 0);">foreach(</span><span style="color: rgb(0, 0, 187);">$this</span><span style="color: rgb(0, 119, 0);">-&gt;</span><span style="color: rgb(0, 0, 187);">listaPalavras&nbsp;</span><span style="color: rgb(0, 119, 0);">as&nbsp;</span><span style="color: rgb(0, 0, 187);">$palavra&nbsp;</span><span style="color: rgb(0, 119, 0);">=&gt;&nbsp;</span><span style="color: rgb(0, 0, 187);">$presenca</span><span style="color: rgb(0, 119, 0);">) <br />
        { <br />
        &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 187);">$aparecimentoPercentual&nbsp;</span><span style="color: rgb(0, 119, 0);">=&nbsp;<br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((</span><span style="color: rgb(0, 0, 187);">100&nbsp;</span><span style="color: rgb(0, 119, 0);">*&nbsp;</span><span style="color: rgb(0, 0, 187);">$presenca</span><span style="color: rgb(0, 119, 0);">)&nbsp;/&nbsp;</span><span style="color: rgb(0, 0, 187);">$quantidadePresencas</span><span style="color: rgb(0, 119, 0);">); <br />
        &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 187);">$classeCss&nbsp;</span><span style="color: rgb(0, 119, 0);">=&nbsp;</span><span style="color: rgb(0, 0, 187);">$this</span><span style="color: rgb(0, 119, 0);">-&gt;</span><span style="color: rgb(0, 0, 187);">obtemCss</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">$aparecimentoPercentual</span><span style="color: rgb(0, 119, 0);">); </p>
<p>        &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 187);">$nuvemTags</span><span style="color: rgb(0, 119, 0);">[]&nbsp;=&nbsp;array( <br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(221, 0, 0);">&#8216;palavra&#8217;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 119, 0);">=&gt;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 187);">$palavra</span><span style="color: rgb(0, 119, 0);">, <br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(221, 0, 0);">&#8216;classe&#8217;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 119, 0);">=&gt;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 187);">$classeCss</span><span style="color: rgb(0, 119, 0);">, <br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(221, 0, 0);">&#8216;percentual&#8217;</span><span style="color: rgb(0, 119, 0);">=&gt;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 187);">floor</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">$aparecimentoPercentual</span><span style="color: rgb(0, 119, 0);">) <br />
        &nbsp;&nbsp;&nbsp;&nbsp;); <br />
        }</span></span></code>.<br />
        Primeiro &eacute; calculado o percentual que uma palavra aparece. Pura regra de tr&ecirc;s:<br />
        [Quantidade de Vezes Total que as Palavras Aparecem (obtido acima com array_sum - $quantidadePresencas) = 100%]<br />
X<br />
        [Quantidade de Vezes que a palavra apareceu ($presenca) = Percentual dessa palavra ($aparecimentoPercentual)].<br />
        Assim, $aparecimentoPercentual &eacute; passado para obtemCss, que obtem a classifica&ccedil;&atilde;o da palavra.</p>
<p>        Cada palavra &eacute; inserida na nuvem com a classe css (na verdade apenas o n&uacute;mero de classifica&ccedil;&atilde;o) e o percentual (caso voc&ecirc; queira usar para algum debug ou outro c&aacute;lculo).  </li>
<li>  A impress&atilde;o da nuvem, como no exemplo, &eacute; iterando no array:<br />
  <code>$NuvemTags = $Nuvem-&gt;mostraNuvem();<br />
  foreach($NuvemTags as $Tag)<br />
    {<br />
    &nbsp;&nbsp;&nbsp;echo '&lt;span class=&quot;tag' . $Tag['classe'] . '&quot;&gt;' . $Tag['palavra'] . '&lt;/span&gt; ';<br />
  }</code></li>
</ol>
<p>Veja o exemplo <a href="http://desenvolvedorphp.auriummobile.com/artigos/nuvemtags/nuvemExemplo.php" target="_blank">em execução</a>. </p>
<p>Como pode ver, nuvem de tags n&atilde;o tem nenhum segredo, &eacute; baseada em percentual. Em artigo futuro, criaremos uma nuvem de tag com ordena&ccedil;&atilde;o baseada em nome ou peso, bem como adaptada de banco de dados. Se bem que por essa classe voc&ecirc; j&aacute; pode obter as palavras do banco de dados, basta obter suas categorias e passar para o objeto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.auriumsoft.com.br/desenvolvedorphp/2007/nuvem-de-tags-com-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AJAX descomplicado com PHP e Prototype, parte 1</title>
		<link>http://www.auriumsoft.com.br/desenvolvedorphp/2007/ajax-descomplicado-com-php-e-prototype-parte-1/</link>
		<comments>http://www.auriumsoft.com.br/desenvolvedorphp/2007/ajax-descomplicado-com-php-e-prototype-parte-1/#comments</comments>
		<pubDate>Sun, 21 Oct 2007 06:19:50 +0000</pubDate>
		<dc:creator>Alfred R. Baudisch</dc:creator>
		
		<category>AJAX</category>

		<category>PHP</category>

		<category>Prototype</category>

		<guid isPermaLink="false">http://www.auriumsoft.com.br/desenvolvedorphp/2007/ajax-descomplicado-com-php-e-prototype-parte-1/</guid>
		<description><![CDATA[Apesar de eu ter criado a s&#233;rie de artigos sobre AJAX + CPAINT, estou criando essa nova, com artigos r&#225;pidos explicando o uso da Prototype. Segundo o site oficial: &#34;Prototype is a JavaScript Framework that aims to ease development of dynamic web applications.&#34;. Melhor explicando:

&#201; um framework JavaScript, contido em um pequeno e &#250;nico .js;
Possui [...]]]></description>
			<content:encoded><![CDATA[<p>Apesar de eu ter criado a s&eacute;rie de artigos sobre AJAX + CPAINT, estou criando essa nova, com artigos r&aacute;pidos explicando o uso da <strong>Prototype</strong>. Segundo o <a href="http://www.prototypejs.org/" target="_blank">site oficial</a>: <em>&quot;Prototype is a JavaScript Framework that aims to ease development of dynamic web applications.&quot;</em>. Melhor explicando:</p>
<ul>
<li>&Eacute; um framework JavaScript, contido em um pequeno e &uacute;nico .js;</li>
<li>Possui fun&ccedil;&otilde;es de DHTML, shortcuts (exemplo: em vez de document.getElementById(&#8217;elementoId&#8217;), simplesmente diga $(&#8217;elementoId&#8217;));</li>
<li>Uma das abstra&ccedil;&otilde;es de AJAX mais completas e r&aacute;pidas de implementar;</li>
<li>etc.</li>
</ul>
<p>Bom, <a href="http://www.prototypejs.org/download" target="_blank">faça já o download</a>.</p>
<p>Nesse primeiro artigo da s&eacute;rie, uma busca muito, muito simples, com retorno em HTML, para voc&ecirc; entender como &eacute; a intera&ccedil;&atilde;o da Prototype com o PHP. Na verdade n&atilde;o existe intera&ccedil;&atilde;o (a Prototype &eacute; apenas esse pequeno JS!), e sim, uma s&eacute;rie de Chamadas (feita por ela) -&gt; Respostas (pelo PHP ou qualquer outra linguagem do lado de servidor que voc&ecirc; utilize). Vamos ao c&oacute;digo:</p>
<p><a id="more-7"></a></p>
<p><strong>busca.php</strong>
<div style="overflow:auto;width:400px;height:300px;">
  &lt;?php </p>
<p>    $Buscar&nbsp;=&nbsp;$_GET[&#8217;buscar&#8217;]; </p>
<p>    switch($Buscar) <br />
    { <br />
    &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&#8217;cidade&#8217;: <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$Retorno&nbsp;=&nbsp;array(&#8217;Curitiba&#8217;,&nbsp;&#8217;S&atilde;o&nbsp;Paulo&#8217;,&nbsp;&#8217;New&nbsp;York&#8217;); <br />
    &nbsp;&nbsp;&nbsp;&nbsp;break; </p>
<p>    &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&#8217;dinheiro&#8217;: <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$Retorno&nbsp;=&nbsp;array(&#8217;Milh&atilde;o&#8217;,&nbsp;&#8217;Bilh&atilde;o&#8217;,&nbsp;&#8217;Trilh&atilde;o&#8217;); <br />
    &nbsp;&nbsp;&nbsp;&nbsp;break; </p>
<p>    &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&#8217;desejos&#8217;: <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$Retorno&nbsp;=&nbsp;array(&#8217;Casamento&#8217;,&nbsp;&#8217;Fam&iacute;lia&#8217;,&nbsp;&#8217;Riqueza&#8217;); <br />
    &nbsp;&nbsp;&nbsp;&nbsp;break; <br />
    } </p>
<p>    if(sizeof($Retorno)) <br />
    { <br />
    &nbsp;&nbsp;&nbsp;&nbsp;foreach($Retorno&nbsp;as&nbsp;$R) <br />
    &nbsp;&nbsp;&nbsp;&nbsp;{ <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$HTML&nbsp;.=&nbsp;&#8217;&lt;li&gt;&#8217;&nbsp;.&nbsp;$R&nbsp;.&nbsp;&#8217;&lt;/li&gt;&#8217;; <br />
    &nbsp;&nbsp;&nbsp;&nbsp;} </p>
<p>    &nbsp;&nbsp;&nbsp;&nbsp;$HTML&nbsp;=&nbsp;&#8217;&lt;ul&gt;&#8217;&nbsp;.&nbsp;$HTML&nbsp;.&nbsp;&#8217;&lt;/ul&gt;&#8217;; </p>
<p>    &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;utf8_encode($HTML); <br />
    } </p>
<p>    ?&gt;</div>
</p>
<p><strong>formulario.html</strong></p>
<div style="overflow:auto;width:400px;height:300px;">&lt;html&gt; <br />
  &lt;head&gt; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;PHP&nbsp;e&nbsp;Prototype&nbsp;-&nbsp;#1&lt;/title&gt; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;style&nbsp;type=&quot;text/css&quot;&gt; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;!&#8211; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;{ <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&#8217;Trebuchet&nbsp;MS&#8217;; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;11px; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;} </p>
<p>  &nbsp;&nbsp;&nbsp;&nbsp;.ativo&nbsp;{ <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;inline; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;} </p>
<p>  &nbsp;&nbsp;&nbsp;&nbsp;.oculto&nbsp;{ <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;none; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;} </p>
<p>  &nbsp;&nbsp;&nbsp;&nbsp;div&nbsp;{ <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:&nbsp;10px; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;} <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&#8211;&gt; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;/style&gt; <br />
  &nbsp;&nbsp;&nbsp;&nbsp; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;type=&quot;text/javascript&quot;&nbsp;src=&quot;prototype.js&quot;&gt;&lt;/script&gt; </p>
<p>  &nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;type=&quot;text/javascript&quot;&gt; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Buscar() <br />
  &nbsp;&nbsp;&nbsp;&nbsp;{ <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;A&ccedil;&atilde;o&nbsp;que&nbsp;ocorre&nbsp;quando&nbsp;inicia&nbsp;a&nbsp;chamada, <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;e&nbsp;quando&nbsp;ela&nbsp;&eacute;&nbsp;finalizada <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ajax.Responders.register({ <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onCreate:&nbsp;function(){ <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(&#8217;loading&#8217;).className&nbsp;=&nbsp;&#8217;ativo&#8217;; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onComplete:&nbsp;function(){ <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(&#8217;loading&#8217;).className&nbsp;=&nbsp;&#8217;oculto&#8217;; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); </p>
<p>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;A&nbsp;chamada&nbsp;AJAX&nbsp;propriamente&nbsp;dita <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Ajax.Request(&#8217;busca.php&#8217;, <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method:&#8217;get&#8217;, <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters:&nbsp;$(&#8217;formBusca&#8217;).serialize(true), </p>
<p>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onSuccess:&nbsp;function(transport)&nbsp;{ <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;response&nbsp;=&nbsp;transport.responseText&nbsp;||&nbsp;&quot;Nada&nbsp;Encontrado&quot;; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(&#8217;retorno&#8217;).innerHTML&nbsp;=&nbsp;response; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onFailure:&nbsp;function(){&nbsp;alert(&#8217;Something&nbsp;went&nbsp;wrong&#8230;&#8217;)&nbsp;} <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); <br />
  &nbsp;&nbsp;&nbsp;&nbsp;} <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt; <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt; <br />
  &lt;body&gt; </p>
<p>  &lt;div&nbsp;id=&quot;busca&quot;&gt;&lt;form&nbsp;id=&quot;formBusca&quot;&gt;&lt;input&nbsp;type=&quot;text&quot;&nbsp;name=&quot;buscar&quot;&nbsp;onblur=&quot;Buscar();&quot;/&gt;&nbsp;&lt;span&nbsp;id=&quot;loading&quot;&nbsp;class=&quot;oculto&quot;&gt;&lt;img&nbsp;src=&quot;load.gif&quot;&nbsp;border=&quot;0&quot;/&gt;&nbsp;Carregando&#8230;&lt;/span&gt;&lt;/form&gt;&nbsp;&lt;/div&gt; </p>
<p>  &lt;div&nbsp;id=&quot;retorno&quot;&gt;&lt;/div&gt; </p>
<p>  &lt;/body&gt; <br />
&lt;/html&gt;</div>
</p>
<p><strong>Passo-a-passo</strong></p>
<ol>
<li>Como &eacute; de se esperar, sempre inclua a prototype: <code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 119, 0);">&lt;</span><span style="color: rgb(0, 0, 187);">script&nbsp;type</span><span style="color: rgb(0, 119, 0);">=</span><span style="color: rgb(221, 0, 0);">&quot;text/javascript&quot;&nbsp;</span><span style="color: rgb(0, 0, 187);">src</span><span style="color: rgb(0, 119, 0);">=</span><span style="color: rgb(221, 0, 0);">&quot;prototype.js&quot;</span><span style="color: rgb(0, 119, 0);">&gt;</span><span style="color: rgb(0, 0, 187);">&lt;/script&gt;</span></span></code>. </li>
<li>A fun&ccedil;&atilde;o $ &eacute; um atalho para document.getElementById. Agora acostume-se. Use e abuse! </li>
<li>N&atilde;o &eacute; necess&aacute;rio declarar nem instanciar nada. Voc&ecirc; s&oacute; chama a prototype quando for utiliz&aacute;-la. No nosso caso, ela &eacute; chamada dentro da fun&ccedil;&atilde;o Buscar. A chamada AJAX &eacute; simplesmente feita pelo comando: <code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 119, 0);">new&nbsp;</span><span style="color: rgb(0, 0, 187);">Ajax</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">Request</span><span style="color: rgb(0, 119, 0);"></span></span></code> e, assim inserindo os variados par&acirc;metros. S&atilde;o dezenas deles, que tentarei explicar no decorrer de toda a s&eacute;rie. Voc&ecirc; pode ver a lista completa <a href="http://www.prototypejs.org/api/ajax/options" target="_blank">na documentação oficial.</a></li>
<li>Primeiro defino o modo de envio: <code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);">method</span><span style="color: rgb(0, 119, 0);">:</span><span style="color: rgb(221, 0, 0);">&#8216;get&#8217;</span><span style="color: rgb(0, 119, 0);">, </span></span></code>(pode ser &#8216;post&#8217;) .</li>
<li> Os dados que envio: <code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);">parameters</span><span style="color: rgb(0, 119, 0);">:&nbsp;$(</span><span style="color: rgb(221, 0, 0);">&#8216;formBusca&#8217;</span><span style="color: rgb(0, 119, 0);">).</span><span style="color: rgb(0, 0, 187);">serialize</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">true</span><span style="color: rgb(0, 119, 0);">), </span></span></code>. Nesse caso eu envio todos os campos do formul&aacute;rio. No PHP eles s&atilde;o recebidos simplesmente dentro da vari&aacute;vel $_GET (ou $_POST). Exemplo: se no formul&aacute;rio h&aacute; um campo nome e email, o PHP receber&aacute;: $_GET[&#8217;email&#8217;] e $_GET[&#8217;nome&#8217;]. </li>
<li>Defino como o retorno ser&aacute; tratado:<br />
    <code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);">onSuccess</span><span style="color: rgb(0, 119, 0);">:&nbsp;function(</span><span style="color: rgb(0, 0, 187);">transport</span><span style="color: rgb(0, 119, 0);">)&nbsp;{ <br />
    &nbsp;&nbsp;var&nbsp;</span><span style="color: rgb(0, 0, 187);">response&nbsp;</span><span style="color: rgb(0, 119, 0);">=&nbsp;</span><span style="color: rgb(0, 0, 187);">transport</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">responseText&nbsp;</span><span style="color: rgb(0, 119, 0);">||&nbsp;</span><span style="color: rgb(221, 0, 0);">&quot;Nada&nbsp;Encontrado&quot;</span><span style="color: rgb(0, 119, 0);">; <br />
    &nbsp;&nbsp;$(</span><span style="color: rgb(221, 0, 0);">&#8216;retorno&#8217;</span><span style="color: rgb(0, 119, 0);">).</span><span style="color: rgb(0, 0, 187);">innerHTML&nbsp;</span><span style="color: rgb(0, 119, 0);">=&nbsp;</span><span style="color: rgb(0, 0, 187);">response</span><span style="color: rgb(0, 119, 0);">; <br />
  }, </span></span></code>. Nesse exemplo o PHP imprime texto com &quot;echo&quot;, logo a resposta vem como texto puro, dentro de response.Text. Caso n&atilde;o venha nada, o || &eacute; tratado, e a resposta fica &quot;Nada encontrado&quot;. O que quer que seja a resposta, eu passo para o div retorno.</li>
<li>E defino um tratamento de erro (caso ocorra perda de conex&atilde;o, por exemplo):<code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"> onFailure</span><span style="color: rgb(0, 119, 0);">:&nbsp;function(){&nbsp;</span><span style="color: rgb(0, 0, 187);">alert</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(221, 0, 0);">&#8216;Something&nbsp;went&nbsp;wrong&#8230;&#8217;</span><span style="color: rgb(0, 119, 0);">)</span></span></code>. </li>
<li>Logo acima do Request, temos a cria&ccedil;&atilde;o de &quot;Responders&quot;. O que fazem? Eles executam uma a&ccedil;&atilde;o quando um Request &eacute; criado e outra quando o Request &eacute; destru&iacute;do. Atrav&eacute;s dos Responders voc&ecirc; pode criar mensagens de &quot;loading&quot; por exemplo, ou alguma outra intera&ccedil;&atilde;o necess&aacute;ria.<br />
      <code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);">Ajax</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">Responders</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">register</span><span style="color: rgb(0, 119, 0);">({ <br />
        &nbsp;&nbsp;</span><span style="color: rgb(0, 0, 187);">onCreate</span><span style="color: rgb(0, 119, 0);">:&nbsp;function(){ <br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: rgb(221, 0, 0);">&#8216;loading&#8217;</span><span style="color: rgb(0, 119, 0);">).</span><span style="color: rgb(0, 0, 187);">className&nbsp;</span><span style="color: rgb(0, 119, 0);">=&nbsp;</span><span style="color: rgb(221, 0, 0);">&#8216;ativo&#8217;</span><span style="color: rgb(0, 119, 0);">; <br />
        &nbsp;&nbsp;},&nbsp; <br />
        &nbsp;&nbsp;</span><span style="color: rgb(0, 0, 187);">onComplete</span><span style="color: rgb(0, 119, 0);">:&nbsp;function(){ <br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: rgb(221, 0, 0);">&#8216;loading&#8217;</span><span style="color: rgb(0, 119, 0);">).</span><span style="color: rgb(0, 0, 187);">className&nbsp;</span><span style="color: rgb(0, 119, 0);">=&nbsp;</span><span style="color: rgb(221, 0, 0);">&#8216;oculto&#8217;</span><span style="color: rgb(0, 119, 0);">; <br />
        &nbsp;&nbsp;} <br />
    }); </span></span></code><br />
  Veja que na cria&ccedil;&atilde;o, ele exibe o div de loading, e na destrui&ccedil;&atilde;o do objeto, ele oculta. </li>
<li>Simples, n&atilde;o? Veja o PHP como fica limpo. E o JavaScript mais limpo ainda.
  </li>
</ol>
<p>Veja esse exemplo <a href="http://desenvolvedorphp.auriummobile.com/artigos/phpprototype/pt01.html" target="_blank">em funcionamento</a>. Digite &quot;dinheiro&quot; e aperte TAB, digite &quot;cidade&quot;, e depois qualquer coisa. </p>
<p><strong>Refer&ecirc;ncias</strong></p>
<ol>
<li>Documenta&ccedil;&atilde;o da API do objeto AJAX: <a href="http://www.prototypejs.org/api/ajax" target="_blank">http://www.prototypejs.org/api/ajax</a></li>
<li>Introdu&ccedil;&atilde;o ao objeto AJAX, com exemplos: <a href="http://www.prototypejs.org/learn/introduction-to-ajax" target="_blank">http://www.prototypejs.org/learn/introduction-to-ajax</a>
  </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.auriumsoft.com.br/desenvolvedorphp/2007/ajax-descomplicado-com-php-e-prototype-parte-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tira dúvidas: Instalando Apache 2, PHP 5 e MySQL no Windows.</title>
		<link>http://www.auriumsoft.com.br/desenvolvedorphp/2007/tira-duvidas-instalando-apache-2-php-5-e-mysql-no-windows/</link>
		<comments>http://www.auriumsoft.com.br/desenvolvedorphp/2007/tira-duvidas-instalando-apache-2-php-5-e-mysql-no-windows/#comments</comments>
		<pubDate>Sat, 20 Oct 2007 01:14:29 +0000</pubDate>
		<dc:creator>Alfred R. Baudisch</dc:creator>
		
		<category>PHP</category>

		<category>Apache</category>

		<category>MySQL</category>

		<guid isPermaLink="false">http://www.auriumsoft.com.br/desenvolvedorphp/2007/tira-duvidas-instalando-apache-2-php-5-e-mysql-no-windows/</guid>
		<description><![CDATA[ATUALIZAÇÃO:  Confira o novo artigo - Apache 2, PHP 5 e MySQL 5 em menos de 5 minutos com WampServer!
Não responderei mais as dúvidas postadas nesse artigo, por favor conferir o texto sobre instalação WampServer, indicado acima.
Após receber centenas de e-mails referente ao meu artigo Instalando Apache 2, PHP 5 e MySQL no Windows [...]]]></description>
			<content:encoded><![CDATA[<h2><strong>ATUALIZAÇÃO: </strong> Confira o novo artigo - <a href="http://www.auriumsoft.com.br/desenvolvedorphp/2008/apache-2-php-5-e-mysql-5-em-menos-de-5-minutos-com-wampserver/">Apache 2, PHP 5 e MySQL 5 em menos de 5 minutos com WampServer!</a></h2>
<h2>Não responderei mais as dúvidas postadas nesse artigo, por favor conferir o texto sobre instalação WampServer, indicado acima.</h2>
<p>Após receber centenas de e-mails referente ao meu artigo Instalando Apache 2, PHP 5 e MySQL no Windows que foi publicado em vários sites, com dúvidas, pois a maioria não estava conseguindo instalar, eu resolvi revisar o artigo. Removi tudo do meu computador e instalei o trio parada dura (Apache, PHP e MYSQL), seguindo o artigo à risca. </p>
<p>Resultado? Tudo funcionou perfeitamente.</p>
<p>Por essa razão, irei atualizando esse tópico com as dúvidas e problemas mais freqüentes do pessoal. Inclusive se você tiver alguma, não hesite em dizer, que ajudarei. </p>
<p>Leia o artigo em uma de minhas colunas:</p>
<ul>
<li><a href="http://linhadecodigo.com.br/Artigo.aspx?id=1151" target="_blank">Linha de Código</a></li>
<li><a href="http://www.plugmasters.com.br/sys/materias/243/1/Instalando-Apache-%2B-MySQL-%2B-PHP-5-no-Windows" target="_blank">Plug Masters</a></li>
</ul>
<p><strong>Soluções, Perguntas e Respostas:</strong></p>
<ol>
<li><strong>Links atualizados para download dos softwares necessários.</strong><a name="linksWamp"></a><br />
Disponibilizo o caminho da fonte. E não mais o link direto para uma versão:</p>
<p><strong>APACHE</strong> - <a href="http://httpd.apache.org/download.cgi" target="_blank">http://httpd.apache.org/download.cgi</a>. Clique em &#8220;Other Files&#8221;, &#8220;binaries&#8221;, &#8220;win32&#8243; e selecione o arquivo que tiver a maior versão. Normalmente é o penúltimo da lista de arquivos. No caso quando escrevi isso, a maior versão era 2.26, logo o arquivo que baixei: <strong>apache_2.2.6-win32-x86-no_ssl.msi</strong>.</p>
<p><strong>PHP</strong> - <a href="http://www.php.net/downloads.php" target="_blank">http://www.php.net/downloads.php</a>. Faça download do primeiro item logo após a seção <em>Windows Binaries</em>. Exemplo: <em>PHP 5.2.4 zip package [9,702Kb] - 30 August 2007</em>.</p>
<p><strong>MySQL</strong> - <a href="http://dev.mysql.com/downloads/mysql/5.0.html#win32" target="_blank">http://dev.mysql.com/downloads/mysql/5.0.html#win32</a>. Na linha <em>Without installer (unzip in C:\)</em>, clique em &#8220;Pick a Mirror&#8221;. Ele mostrará tela de cadastro. É opcional, se não quiser cadastrar, logo abaixo clique em <em>» No thanks, just take me to the downloads!</em>, e selecione um mirror.
</li>
<li><strong>O arquivo http://www.apachelounge.com/download/mods/php5apache2.dll-php5.1.x.zip não existe mais?</strong> Ele não é mais necessário, ignore esse passo do tutorial. </li>
<li><strong>Modificações ao adicionar o Apache Handler</strong> A linha deve ser <strong>LoadModule php5_module &#8220;c:/php5/php5apache2_2.dll&#8221;</strong>. Note o &#8220;_2&#8243; no final e não somente &#8220;apache2.dll&#8221;</li>
<li><strong>O Apache inicia e fecha logo em seguida.</strong><br />
Se a sua instalação prosseguiu sem erro, é normal que isso aconteça, pois o Apache executa em segundo plano. Verifique, abrindo seu navegador e acesse http://localhost. Caso apareça uma mensagem &#8220;It Works!&#8221;, tudo foi bem sucedido.</li>
<li><strong>Ainda tem problemas?</strong> Envie seu httdp.conf para meu e-mail alfred.baudisch@gmail.com especificando qual o problema que ocorre!</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.auriumsoft.com.br/desenvolvedorphp/2007/tira-duvidas-instalando-apache-2-php-5-e-mysql-no-windows/feed/</wfw:commentRss>
		</item>
		<item>
		<title>O que é AJAX e como aplicá-la com PHP, parte 1</title>
		<link>http://www.auriumsoft.com.br/desenvolvedorphp/2007/o-que-e-ajax-e-como-aplica-la-com-php-parte-1/</link>
		<comments>http://www.auriumsoft.com.br/desenvolvedorphp/2007/o-que-e-ajax-e-como-aplica-la-com-php-parte-1/#comments</comments>
		<pubDate>Fri, 19 Oct 2007 21:56:28 +0000</pubDate>
		<dc:creator>Alfred R. Baudisch</dc:creator>
		
		<category>AJAX</category>

		<category>PHP</category>

		<category>CPAINT</category>

		<guid isPermaLink="false">http://www.auriumsoft.com.br/desenvolvedorphp/2007/o-que-e-ajax-e-como-aplica-la-com-php-parte-1/</guid>
		<description><![CDATA[Como lançamento do blog, irei republicar todos os meus artigos de PHP, alguns revisados (como o Instalando Apache + MySQL + PHP 5 no Windows - que é recorde de visitação em todos os sites que foi publicado). De primeira, segue o artigo sobre AJAX.
Inclusive, a segunda parte já está pronta e logo estará publicada [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.auriumsoft.com.br/desenvolvedorphp/wp-content/uploads/2007/10/diagrama_ajax-pq.gif" alt="Caminho AJAX" align="left" />Como lançamento do blog, irei republicar todos os meus artigos de PHP, alguns revisados (como o Instalando Apache + MySQL + PHP 5 no Windows - que é recorde de visitação em todos os sites que foi publicado). De primeira, segue o artigo sobre AJAX.</p>
<p>Inclusive, a segunda parte já está pronta e logo estará publicada no Linha de Código e Plug Masters.</p>
<p><strong>O que é AJAX e como aplicá-la com PHP, parte 1</strong><br />
<a id="more-3"></a><br />
O uso de AJAX está se proliferando cada vez mais pela internet, justamente por trazer mais interatividade e usabilidade para as aplicações – ou até mesmo, mais “glamour”. Junto disso, surgem inúmeras maneiras de implementar essa combinação (AJAX não é uma tecnologia, é um uso conjunto de tecnologias), algumas complicadas e com recursos demais, outras simplificadas, mas deficientes de recursos. A classe CPAINT é uma classe completa e permite incluir AJAX eficientemente em suas aplicações web. Nessa série de artigos, entenda o que é AJAX, as características da CPAINT, bem como uma explicações por meio de códigos exemplo.</p>
<ul>
<li>Faça já o <a href="http://www.auriumsoft.com.br/desenvolvedorphp/arquivos/OqueeAJAXecomoaplicalacomPHP-pt01.pdf" target="_blank">download do PDF com o artigo completo</a> e do <a href="http://www.auriumsoft.com.br/desenvolvedorphp/arquivos/PHP_OqueAjax-ePHP-Parte1-Codigos.zip">código fonte</a>.</li>
<li>Artigo também disponível no <a href="http://linhadecodigo.com.br/Artigo.aspx?id=1144" target="_blank">Linha de Código</a> e <a href="http://www.plugmasters.com.br/sys/materias/251/1/O-que-%E9-AJAX-e-como-aplic%E1-lo-com-PHP%2C-parte-1" target="_blank">Plug Masters</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.auriumsoft.com.br/desenvolvedorphp/2007/o-que-e-ajax-e-como-aplica-la-com-php-parte-1/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
