<?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/"
	>

<channel>
	<title>Tudo sobre programação! Ou quase tudo!!!</title>
	<atom:link href="http://programacao.maistemas.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://programacao.maistemas.com</link>
	<description>Sendo que nada funciona sem a respectiva programação vamos tentar aqui reunir dicas e informações úteis sobre esta temática.</description>
	<lastBuildDate>Thu, 24 Sep 2009 16:11:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Melhorar performance do site</title>
		<link>http://programacao.maistemas.com/performance/melhorar-performance-do-site/</link>
		<comments>http://programacao.maistemas.com/performance/melhorar-performance-do-site/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 16:11:09 +0000</pubDate>
		<dc:creator>Henrique Barquero</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[funções]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://programacao.maistemas.com/?p=127</guid>
		<description><![CDATA[Há uns dias andava a testar uma página para a empresa que estou a desenvolver um portal que servirá essencialmente para a promoção de cursos quando me deparei que numa simples listagem os tempos de PHP estavam algo exagerados.
Infelizmente muitas vezes as boas ideias ou soluções só nos vem à mente quando já passamos por [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">Há uns dias andava a testar uma página para a empresa que estou a desenvolver um portal que servirá essencialmente para a promoção de cursos quando me deparei que numa simples listagem os tempos de PHP estavam algo exagerados.</p>
<p style="text-align: justify">Infelizmente muitas vezes as boas ideias ou soluções só nos vem à mente quando já passamos por vezes horas a fio, ou mesmo dias, a fazer testes e mais testes e quando nos damos conta, plimm, luzinha <img src='http://programacao.maistemas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify">Para terem uma ideia, o pagina em questão tinha que listar apenas 25 pedidos de informação, relacionados a cursos, mas tinha que fazer uma &lt;select&#8230;&gt; com todos os cursos, que neste caso era de 4000. Sei que o numero é algo alto, mas mesmo apenas com 500 cursos o tempo era demasiadamente exagerado 0.458961 segundos. Isto pensando que apenas eu estava a abrir esta página, e que após estar online servira centenas de utilizadores ao mesmo tempo, podem perceber a minha preocupação <img src='http://programacao.maistemas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify">Como referi acima, depois de muitas voltas, vários testes, cheguei à conclusão que o realmente demorava bastante era o tal &lt;select&gt; e quase, quase desisti, visto que nada podia fazer, precisava dele tal qual como estava.</p>
<p style="text-align: justify">Bem a solução passou por algo, que como referi acima foi tipo plimm (até me insultei a mim próprio), isto por que era tão simples como usar a função  ob_start(); no inicio da página e ob_end_flush(); mesmo no final da página.</p>
<p style="text-align: justify">Para quem não sabe esta função o que faz é ir carregando tudo em memoria (servidor) e mostrar a página de 1 vez só, evitando aquelas situações de páginas que parecem que estão a ser carregadas às prestações <img src='http://programacao.maistemas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify">De referir que se a sua ligação à internet for lenta e a página pesada, vai sempre haver alguma falha, mas voltando ao assunto.</p>
<p style="text-align: justify">Apenas com o aplicar desta função o tempo foi reduzido dos tais 0.458961 segundos para  0.006717 segundos, o que realmente é uma grande diferença.</p>
<p>Para verem a documentação desta função podem ver o seguinte link:</p>
<p><a title="ob_start" href="http://pt.php.net/manual/pt_BR/function.ob-start.php" target="_self">http://pt.php.net/manual/pt_BR/function.ob-start.php</a></p>
<p>Para finalizar, como podem entender aconselho muito mesmo o uso desta função nos vossos sites.</p>
]]></content:encoded>
			<wfw:commentRss>http://programacao.maistemas.com/performance/melhorar-performance-do-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Função Mail do PHP</title>
		<link>http://programacao.maistemas.com/geral/funcao-mail-do-php/</link>
		<comments>http://programacao.maistemas.com/geral/funcao-mail-do-php/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 10:49:50 +0000</pubDate>
		<dc:creator>barquero</dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false">http://programacao.maistemas.com/?p=117</guid>
		<description><![CDATA[Hoje recordei-me que ao usar a função mail do php, na sua forma normal sempre me deu algumas dores de cabeça, e não é porque ela não funcione bem, tem a ver com o facto de poderem ocorrer alguns problemas inesperados e que na maioria das situações, nós como utilizadores normais podemos não nos dar [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">Hoje recordei-me que ao usar a função mail do php, na sua forma normal sempre me deu algumas dores de cabeça, e não é porque ela não funcione bem, tem a ver com o facto de poderem ocorrer alguns problemas inesperados e que na maioria das situações, nós como utilizadores normais podemos não nos dar conta.</p>
<p style="text-align: justify">Os problemas de que falo são, em primeiro lugar o email ir para ao correio não solicitado ou ao spam de alguns servidores de email globais, tal como o gmail, yahoo ou hotmail. No meu caso testei esta função para estes 3 de forma a garantir que passavam sem problemas nos filtros, e sendo que estes são sem dúvida os maiores, e os mais &#8220;complicados&#8221; em relação ao SPAM, podemos quase garantir que um email, ou sistema de newsletter que passe correctamente os filtros destes 3 sistemas, garantidamente passara em qualquer outro.</p>
<p>Então cá vai.</p>
<p>O uso normal da função tal como podem ver no www.php.net poderia ser o seguinte:</p>
<pre class="php">
<span class="phpScriptTag"><span class="phpOperator">&lt;</span><span class="phpOperator">?</span>php</span>
$Name <span class="phpOperator">=</span> <span class="phpString">"O Nome"</span><span class="phpText">;</span> <span class="phpComment">//nome de quem envia
</span>$e<span class="phpFunction">mail</span> <span class="phpOperator">=</span> <span class="phpString">"e<span class="phpFunction">mail</span>@dominio.com"</span><span class="phpText">;</span> <span class="phpComment">//O e<span class="phpFunction">mail</span> de envio
</span>$recipient <span class="phpOperator">=</span> <span class="phpString">"PessoaQueRecebe@endereco.com"</span><span class="phpText">;</span> <span class="phpComment">//O e<span class="phpFunction">mail</span> de quem recebe
</span>$mail_body <span class="phpOperator">=</span> <span class="phpString">"Aqui vai o texto<span class="phpKeyword"> do </span><span class="htmlText">e</span><span class="phpFunction">mail</span>.<span class="phpOperator">.</span>."</span><span class="phpText">;</span> <span class="phpComment">//corpo<span class="phpKeyword"> do </span><span class="htmlText">e</span><span class="phpFunction">mail</span>
</span>$subject <span class="phpOperator">=</span> <span class="phpString">"Assunto para rever"</span><span class="phpText">;</span> <span class="phpComment">//Assunto
</span>$header <span class="phpOperator">=</span> <span class="phpString">"From<span class="phpOperator">:</span> "</span>. $Name <span class="phpOperator">.</span> <span class="phpString">" <span class="phpOperator">&lt;</span>"</span> <span class="phpOperator">.</span> $e<span class="phpFunction">mail</span> <span class="phpOperator">.</span> <span class="phpString">"<span class="phpOperator">&gt;</span>"</span><span class="phpText">;</span> <span class="phpComment">//Campos Opcionais
</span>
<span class="phpFunction">mail</span><span class="phpOperator">(</span>$recipient, $subject, $mail_body, $header<span class="phpOperator">)</span><span class="phpText">;</span> <span class="phpComment">//Comando de envio
</span><span class="phpScriptTag"><span class="phpOperator">?</span><span class="phpOperator">&gt;</span></span>
</pre>
<p>Aqui começa o problema <img src='http://programacao.maistemas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify">Uma das coisas importantes a adicionar nos cabeçalhos (header) da mensagem é o Reply to, esta é uma das regras de controlo de SPAM da maioria dos servidores, logo deve ser devidamente colocado.</p>
<p>Então no código mencionado adicionaria a seguinte linha:</p>
<pre class="php">
$header <span class="phpOperator">=</span> <span class="phpString">"From<span class="phpOperator">:</span> "</span>. $Name <span class="phpOperator">.</span> <span class="phpString">" <span class="phpOperator">&lt;</span>"</span> <span class="phpOperator">.</span> $email <span class="phpOperator">.</span> <span class="phpString">"<span class="phpOperator">&gt;</span>"</span><span class="phpText">;</span> <span class="phpComment">//Campos Opcionais - Esta já cá estava
</span>$header <span class="phpOperator">.=</span> <span class="phpString">"Reply-To<span class="phpOperator">:</span>  O Seu Nome <span class="phpOperator">&lt;</span>email@dominio.com<span class="phpOperator">&gt;</span>"</span><span class="phpText">;</span> <span class="phpComment">//O nome e  email que esta a usar para o envio
</span></pre>
<p style="text-align: justify">Outra linha Importante a adicionar é o tipo de  Conteúdo/ formato do email e então teriamos mais a seguinte linha (por exemplo):</p>
<pre class="php">
$header <span class="phpOperator">.=</span> <span class="phpString">"Content-type<span class="phpOperator">:</span> text/html"</span><span class="phpText">;</span>
</pre>
<p style="text-align: justify">Podemos ainda adicionar mais ao Header que é o tipo de caracteres, etc, mas isso não me vou alongar aqui, quero referir apenas os pontos básicosque dizem respeito aos filtros de SPAM.</p>
<p style="text-align: justify">Por fim, uma situação que é de extrema importancia, para que tudo fique certinho, tem a ver com uma situação que, a não ser que você faça a gestão de um servidor proprio, será dificil de notar. E isto tem a ver com os emails devolvidos. Por alguma razão, os emails tipicos que se recebe a notificar que um determinado utilizador não existe, ou que tem a caixa de correio cheia, etc, deveriam ser devolvidos ao email que estamos a definir em Reply-to, mas como referi, mas isso não acontece, e o que tambem pode influenciar no SPAM, porque o email, mesmo colocado com todos os parametros certinhos vai nos headear com as definições da conta por defeito do servidor, geralmente um nobody@servidor.com e, claro está que os emails de erro serão devolvidos a este endereço e não ao endereço que definimos acima.</p>
<p style="text-align: justify">Para resolver esta situação o que devemos fazer é acrescentar um pequeno codigo à linha (comando mail) de envio do email:</p>
<pre class="php">
<span class="phpFunction">mail</span><span class="phpOperator">(</span>$recipient, $subject, $mail_body, $header, <span class="phpString">"-f  e<span class="phpFunction">mail</span>@dominio.com"</span><span class="phpOperator">)</span><span class="phpText">;</span> <span class="phpComment">//Comando de envio correcto
</span></pre>
<p style="text-align: justify">Ou, seja acrescenta-mos um 5º parametro a seguir ao $header, com  &#8221;-f  email@dominio.com&#8221;, este será o email no qual serão entregues as mensagens de erro, mais uma vez na minha opinião deverá ser o mesmo definido, anteriormente como quem envia.</p>
<p>Posto isto junto tudo e aqui fica o exemplo completo:</p>
<pre class="php">
<span class="phpScriptTag"><span class="phpOperator">&lt;</span><span class="phpOperator">?</span>php</span>
$Name <span class="phpOperator">=</span> <span class="phpString">"O Nome"</span><span class="phpText">;</span> <span class="phpComment">//nome de quem envia
</span>$e<span class="phpFunction">mail</span> <span class="phpOperator">=</span> <span class="phpString">"e<span class="phpFunction">mail</span>@dominio.com"</span><span class="phpText">;</span> <span class="phpComment">//O e<span class="phpFunction">mail</span> de envio
</span>$recipient <span class="phpOperator">=</span> <span class="phpString">"PessoaQueRecebe@endereco.com"</span><span class="phpText">;</span> <span class="phpComment">//O e<span class="phpFunction">mail</span> de quem recebe
</span>$mail_body <span class="phpOperator">=</span> <span class="phpString">"Aqui vai o texto<span class="phpKeyword"> do </span><span class="htmlText">e</span><span class="phpFunction">mail</span>.<span class="phpOperator">.</span>."</span><span class="phpText">;</span> <span class="phpComment">//corpo<span class="phpKeyword"> do </span><span class="htmlText">e</span><span class="phpFunction">mail</span>
</span>$subject <span class="phpOperator">=</span> <span class="phpString">"Assunto para rever"</span><span class="phpText">;</span> <span class="phpComment">//Assunto
</span>
$header <span class="phpOperator">=</span> <span class="phpString">"From<span class="phpOperator">:</span> "</span>. $Name <span class="phpOperator">.</span> <span class="phpString">" <span class="phpOperator">&lt;</span>"</span> <span class="phpOperator">.</span> $e<span class="phpFunction">mail</span> <span class="phpOperator">.</span> <span class="phpString">"<span class="phpOperator">&gt;</span>"</span><span class="phpText">;</span> <span class="phpComment">//Campos Opcionais
</span>$header <span class="phpOperator">.=</span> <span class="phpString">"Reply-To<span class="phpOperator">:</span>  O Seu Nome <span class="phpOperator">&lt;</span><span class="htmlText">e</span><span class="phpFunction">mail</span>@dominio.com<span class="phpOperator">&gt;</span>"</span><span class="phpText">;</span> <span class="phpComment">//O nome e  e<span class="phpFunction">mail</span> que esta a usar para o envio
</span>$header <span class="phpOperator">.=</span> <span class="phpString">"Content-type<span class="phpOperator">:</span> text/html"</span><span class="phpText">;</span>
<span class="phpFunction">mail</span><span class="phpOperator">(</span>$recipient, $subject, $mail_body, $header, <span class="phpString">"-f  e<span class="phpFunction">mail</span>@dominio.com"</span><span class="phpOperator">)</span><span class="phpText">;</span> <span class="phpComment">//Comando de envio
</span><span class="phpScriptTag"><span class="phpOperator">?</span><span class="phpOperator">&gt;</span></span>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://programacao.maistemas.com/geral/funcao-mail-do-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando ficheiros .po e .mo para traduzir o seu site</title>
		<link>http://programacao.maistemas.com/php/usando-ficheiros-po-e-mo-para-traduzir-o-seu-site/</link>
		<comments>http://programacao.maistemas.com/php/usando-ficheiros-po-e-mo-para-traduzir-o-seu-site/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 09:52:15 +0000</pubDate>
		<dc:creator>barquero</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tradução]]></category>

		<guid isPermaLink="false">http://programacao.maistemas.com/?p=102</guid>
		<description><![CDATA[Depois de já ter visto várias vezes sites com este tipo de ficheiros decidi fazer o teste com este tipo de tradução e realmente para quem está a pensar em fazer sites muli-lingua esta é sem dúvida a melhor forma de o fazer.
De referir que o que neste caso menciono como tradução são os textos [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de já ter visto várias vezes sites com este tipo de ficheiros decidi fazer o teste com este tipo de tradução e realmente para quem está a pensar em fazer sites muli-lingua esta é sem dúvida a melhor forma de o fazer.</p>
<p>De referir que o que neste caso menciono como tradução são os textos e/ou mensagens colocados no código dos seus ficheiros, como por exemplo os echo(&#8221;mensagem&#8221;); nos html &lt;label&gt;&lt;?=(&#8221;mensagem&#8221;)&lt;/label&gt;, etc&#8230;</p>
<p>De forma a facilitar o trabalho deve nos seus ficheiros mudar o seguinte.</p>
<p>Em todas as mensagens, titulos, alertas, etc., que queira ver traduzidos deve mudar o seguinte:</p>
<p>echo (&#8221;mensagem&#8221;);  - deve ser mudado para echo _(&#8221;mensagem); ou echo gettext(&#8221;mensagem&#8221;);</p>
<p>A função _(&#8221;")  e gettext(&#8221;") são a mesma coisa, pela qual eu prefiro a primeira apenas pela sua simplicidade.</p>
<p>De notar que ao usar uma destas opções, caso ainda não tenha criado os respectivos ficheiros de tradução em nada muda o que vai aparecer na página, ou seja, se desde o inicio do seu projecto colocar as mensagens desta forma vai facilitar no final recolher todas as variáveis que tem de ser traduzidas.</p>
<p>No final do projecto, ou antes, para testar, a melhor forma de criar os seus ficheiros de tradução é usar o programa grátis PoEdit, que pode ser encontrado no <a title="Download PoEdit" href="http://www.poedit.net/" target="_blank">seguinte link</a>. O PoEdit pode ser usado em várias linguas, incluindo Portugues.</p>
<p>No seu programa PoEdit, crie um novo Catalogo. Preenchendo os dados da primeira janela tal como o exemplo abaixo, e não esquecendo de colocar a codificação em UTF-8, isto para que depois ao colocar as mesagens traduzidas no seu site elas não apareçam com aqueles caracteres malucos <img src='http://programacao.maistemas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: center"><a href="http://programacao.maistemas.com/files/2009/07/poedit_passo1.jpg" target="_blank"><img class="aligncenter size-full wp-image-103" src="http://programacao.maistemas.com/files/2009/07/poedit_passo1.jpg" alt="Janelas Inicias PoEdit" width="535" height="221" /></a></p>
<p>Na 2ª opção, imagem á direita acima, escolha a pasta no seu PC onde está localizado o seu site. Assim, poderemos automaticamente detectar todos os termos que no nosso projecto colocamos com o _(&#8221;texto&#8221;); ou gettext(&#8221;texto&#8221;); e rapidamente criar o ficheiro base para tradução.</p>
<p>Agora basta carregar na opção de Actualizar (imagem abaixo) para que automaticamente sejam detectados todos os termos a traduzir.</p>
<p><img class="aligncenter size-full wp-image-104" src="http://programacao.maistemas.com/files/2009/07/poedit_passo2.jpg" alt="Actualizar a partir da fonte" width="432" height="116" /></p>
<p>Depois de  actualizado é começar a fazer as traduções dos termos apresentados na lista.</p>
<p>Agora a parte melhor, que é a do código. Imaginando que usam um ficheiro de configuração para os vossos projectos que é carregado globalmente, com as configurações de base de dados, etc.. devem acrescentar o seguinte código:</p>
<pre class="php">
<span class="phpComment">// variável de lingua, exemplo <span class="phpScriptVar">$_GET</span><span class="phpOperator">[</span><span class="phpString">"lingua"</span><span class="phpOperator">]</span>
</span>$locale <span class="phpOperator">=</span> <span class="phpString">'pt'</span><span class="phpText">;</span>
<span class="phpComment">//onde vão ficar os ficheiros <span class="phpOperator">.</span>po e <span class="phpOperator">.</span> mo  a estrutura deve ser
</span><span class="phpComment">//<span class="phpOperator">.</span>./lib/lang/pt/<span class="phpConstant">LC_MESSAGES</span>/msg_pt.<span class="phpOperator">{</span>po,mo<span class="phpOperator">}</span> para portugues
</span><span class="phpComment">//e <span class="phpOperator">.</span>./lib/lang/es/<span class="phpConstant">LC_MESSAGES</span>/msg_es<span class="phpOperator">.</span><span class="phpOperator">{</span>po,mo<span class="phpOperator">}</span>, para espanhol
</span><span class="phpComment">//mas aqui apenas indicamos a pasta de origem
</span>$locale_dir <span class="phpOperator">=</span> <span class="phpString">'<span class="phpOperator">.</span>./lib/lang'</span><span class="phpText">;</span>
<span class="phpComment">//indica qual o nome<span class="phpKeyword"> do </span>fiheiro a carregar, eu fiz nomes diferentes,
</span><span class="phpComment">//mas poderá usar o mesmo, visto que ficam em pastas diferentes<span class="phpOperator">.</span>
</span>$message=<span class="phpString">"msg_"</span>.$locale<span class="phpText">;</span>
<span class="phpComment">//define a variavel com a lingua escolhida
</span><span class="phpFunction">putenv</span><span class="phpOperator">(</span><span class="phpString">"LANGUAGE<span class="phpOperator">=</span>$locale"</span><span class="phpOperator">)</span><span class="phpText">;</span>
</pre>
<p>Esta secção apenas uso em modo de desenvolvimento, isto porque estes tipo de ficheiro/informação ficam em cache, e a unica forma, de depois de fazer uma alteração a ver é reiniciar o servidor apache, ou mudar os nomes dos ficheiros. Desta forma verificamos qual o ficheiro mais actual e temos sempre a informação actualziada. Depois de concluir, comente esta secção ou elimine-a.</p>
<pre class="php">
<span class="phpComment">// Caminho para o ficheiro
</span>$filename <span class="phpOperator">=</span> <span class="phpString">"$locale_dir/$locale/<span class="phpConstant">LC_MESSAGES</span>/$message.mo"</span><span class="phpText">;</span>
$mtime <span class="phpOperator">=</span> <span class="phpFunction">filemtime</span><span class="phpOperator">(</span>$filename<span class="phpOperator">)</span><span class="phpText">;</span> <span class="phpComment">// verifica se houve modificações
</span>
<span class="phpComment">// o nosso ficheiro unico
</span>$filename_new <span class="phpOperator">=</span> <span class="phpString">"$locale_dir/$locale/<span class="phpConstant">LC_MESSAGES</span>/$message-$mtime.mo"</span><span class="phpText">;</span>
<span class="phpKeyword">
if </span><span class="phpOperator">(</span><span class="phpOperator">!</span><span class="phpFunction">file_exists</span><span class="phpOperator">(</span>$filename_new<span class="phpOperator">)</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>  <span class="phpComment">// verifica se já temos algum
</span><span class="phpComment">// se não criamos a partir<span class="phpKeyword"> do </span>original
</span><span class="phpFunction">copy</span><span class="phpOperator">(</span>$filename,$filename_new<span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
<span class="phpComment">// mudamos para o novo ficheiro
</span>$message <span class="phpOperator">=</span> <span class="phpString">"$message-$mtime"</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
</pre>
<p>e por fim o resto do código</p>
<pre class="php">
<span class="phpFunction">bind<span class="phpFunction">textdomain</span></span><span class="phpOperator">(</span>$message, $locale_dir<span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpFunction">textdomain</span><span class="phpOperator">(</span>$message<span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpComment">// manter esta codificação devido aos caracteres especiais
</span><span class="phpFunction">bind_textdomain_codeset</span><span class="phpOperator">(</span>$message, <span class="phpString">'UTF-<span class="phpNumber">8</span>'</span><span class="phpOperator">)</span><span class="phpText">;</span>
</pre>
<p>E prontos, está feito. Espero que a informação vos seja útil.</p>
]]></content:encoded>
			<wfw:commentRss>http://programacao.maistemas.com/php/usando-ficheiros-po-e-mo-para-traduzir-o-seu-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compactar CSS em tempo de execução utilizando Php</title>
		<link>http://programacao.maistemas.com/php/compactar-css-em-tempo-de-execucao-utilizando-php/</link>
		<comments>http://programacao.maistemas.com/php/compactar-css-em-tempo-de-execucao-utilizando-php/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 16:56:55 +0000</pubDate>
		<dc:creator>clica2x</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://programacao.maistemas.com/?p=93</guid>
		<description><![CDATA[Há uns tempos atrás encontrei um pequeno código PHP para compactar o código CSS em tempo de execução, fazendo assim com que o site seja carregado mais rápido.

Primeiro deverá  renomear o seu ficheiro de css ex: (arquivo.css) para arquivo.css.php
ou seja alterar para a extensão .php
]]></description>
			<content:encoded><![CDATA[<p>Há uns tempos atrás encontrei um pequeno código PHP para compactar o código CSS em tempo de execução, fazendo assim com que o site seja carregado mais rápido.</p>
<p>Primeiro deverá  renomear o seu ficheiro de css ex: (<strong>arquivo.css</strong>) para <strong>arquivo.css.php</strong><br />
ou seja alterar para a extensão .php</p>
<p>Agora onde &#8220;chama&#8221; ou faz o include desse ficheiro .css só tem de alterar para <strong>arquivo.css.php</strong></p>
<p>Agora que é um ficheiro com a extensão “php”, insira na primeira linha o código:</p>
<pre class="php">
<span class="phpScriptTag"><span class="phpOperator">&lt;</span><span class="phpOperator">?</span>php</span><span class="phpKeyword"> if<span class="phpOperator">(</span></span><span class="phpFunction">extension_loaded</span><span class="phpOperator">(</span><span class="phpString">'zlib'</span><span class="phpOperator">)</span><span class="phpOperator">)</span><span class="phpOperator">{</span><span class="phpFunction">ob_start</span><span class="phpOperator">(</span><span class="phpString">'ob_gzhandler'</span><span class="phpOperator">)</span><span class="phpText">;</span><span class="phpOperator">}</span>
<span class="phpFunction">header</span><span class="phpOperator">(</span><span class="phpString">"Content-type<span class="phpOperator">:</span> text/css"</span><span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpScriptTag"><span class="phpOperator">?</span><span class="phpOperator">&gt;</span></span>
</pre>
<p>Após isso, ir  para a última linha e insira o código:</p>
<pre class="php">
<span class="phpScriptTag"><span class="phpOperator">&lt;</span><span class="phpOperator">?</span>php</span><span class="phpKeyword"> if<span class="phpOperator">(</span></span><span class="phpFunction">extension_loaded</span><span class="phpOperator">(</span><span class="phpString">'zlib'</span><span class="phpOperator">)</span><span class="phpOperator">)</span><span class="phpOperator">{</span><span class="phpFunction">ob_end_flush</span><span class="phpOperator">(</span><span class="phpOperator">)</span><span class="phpText">;</span><span class="phpOperator">}</span><span class="phpScriptTag"><span class="phpOperator">?</span><span class="phpOperator">&gt;</span></span>
</pre>
<p>Feito isso, grave o seu arquivo e envie para o servidor, para ver o tamanho no carregamento.</p>
<p>Repare que se tentar  ver o tamanho pelas propriedades por exemplo, o tamanho será o mesmo, ele só irá compactar o ficheiro quando ele for requisitado no servidor.</p>
]]></content:encoded>
			<wfw:commentRss>http://programacao.maistemas.com/php/compactar-css-em-tempo-de-execucao-utilizando-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Importância de código HTML e CSS valido</title>
		<link>http://programacao.maistemas.com/css/importancia-de-codigo-html-e-css-valido/</link>
		<comments>http://programacao.maistemas.com/css/importancia-de-codigo-html-e-css-valido/#comments</comments>
		<pubDate>Thu, 28 May 2009 08:50:34 +0000</pubDate>
		<dc:creator>barquero</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://programacao.maistemas.com/?p=91</guid>
		<description><![CDATA[Qual a importância de ter uma página com HTML (XHTML) e CSS válido?
Bem, existem várias razões para isto, em primeiro lugar, opinião pessoal, podemos  minimizar as diferenças entre navegadores, ou seja, sempre que criarem uma página testem abrir a mesma em vários navegadores, eu pessoalmente testo sempre, nos seguintes, Opera, Firefox, Safari, Chrome, Internet Explorer [...]]]></description>
			<content:encoded><![CDATA[<p>Qual a importância de ter uma página com HTML (XHTML) e CSS válido?</p>
<p>Bem, existem várias razões para isto, em primeiro lugar, opinião pessoal, podemos  minimizar as diferenças entre navegadores, ou seja, sempre que criarem uma página testem abrir a mesma em vários navegadores, eu pessoalmente testo sempre, nos seguintes, Opera, Firefox, Safari, Chrome, Internet Explorer (várias versões existe um aplicativo que server para ter várias versões do IE no mesmo PC), desta forma garanto que independentemente do navegador que usa a página será mostrada da mesma forma, ou pelo menos, com uma margem de diferença muito pequena.</p>
<p>Lógico que ao fazer isto, acertar o código para vários navegadores, por vezes somos levados a colocar no código CSS alguns hacks para fazer este ou aquele efeito, mas que por sua vez falham na validação.</p>
<p>Então, porque validar a pagina em XHTML e CSS se corremos o risco de perder um efeito? Bem, pela minha experiência, há sempre forma de dar a volta à situação usando códifo válido, pode é dar mais trabalho, mas vale a pena. E isto porque, os nossos queridos motores de busca usam regras/técnicas de leitura do código das nossas páginas para fazerem as suas indexações, o que por sua vez, se encontrar erros como por exemplo tags mal fechadas pode  muito bem acontecer que a sua página não seja indexada, e o objectivo que qualquer programador ou webdesinger é exactamente o contrário que os motores de busca indexem as nossas páginas e o máximo de páginas para melhorar os resultados a nivel das pesquisas.</p>
<p>Embora esxistam muitas formas de fazer estas validações as que eu aconselho pessoalmente são:</p>
<p>Validar XHTML &#8211; <a title="Validar XHTML" href="http://validator.w3.org/" target="_blank">http://validator.w3.org/</a></p>
<p>Validar CSS -<a title="Validar CSS" href="http://jigsaw.w3.org/css-validator/" target="_blank"> http://jigsaw.w3.org/css-validator/</a></p>
<p>Claro que como mencionei existem mais ferramentas, mas independentemente de qual usa, teste no final da construção da sua página usar estas duas validações.</p>
<p>Como nota final, logicamente que um codigo XHTML e CSS válidos não são suficientes para uma boa indexação nos motores de busca, mas é uma das regras dos mesmos. Posteriormente falarei mais sobre o tema de SEO (Search Engine Optimization &#8211; Optimização para Motores de Busca) que é realmente um tema algo complexo e com muitas formas diferentes de dar maior relevância às nossas páginas nos motores de busca.</p>
]]></content:encoded>
			<wfw:commentRss>http://programacao.maistemas.com/css/importancia-de-codigo-html-e-css-valido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Editor de Código Livre &#8211; Notepad ++</title>
		<link>http://programacao.maistemas.com/geral/editor-de-codigo-livre-notepad/</link>
		<comments>http://programacao.maistemas.com/geral/editor-de-codigo-livre-notepad/#comments</comments>
		<pubDate>Tue, 05 May 2009 11:58:24 +0000</pubDate>
		<dc:creator>barquero</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://programacao.maistemas.com/?p=87</guid>
		<description><![CDATA[Bom dia,
Hoje venho aqui colocar uma sugestão de um bom editor para várias linguagens de programação, Notepad  ++.
Este editor funciona sobre o ambiente windows e alem de poder funcionar em várias linguas têm muitas ferramentas (plugins) que podem ser associados ao mesmo, é um editor muito rápido, ou antes, bastante leve e claro está o [...]]]></description>
			<content:encoded><![CDATA[<p>Bom dia,</p>
<p>Hoje venho aqui colocar uma sugestão de um bom editor para várias linguagens de programação, Notepad  ++.</p>
<p>Este editor funciona sobre o ambiente windows e alem de poder funcionar em várias linguas têm muitas ferramentas (plugins) que podem ser associados ao mesmo, é um editor muito rápido, ou antes, bastante leve e claro está o melhor de tudo é grátis.</p>
<p>Algumas das funcionalidades do mesmo:</p>
<p style="padding-left: 30px">Destaque de Sintaxes e Sintaxe de Blocos</p>
<p style="padding-left: 30px">WYSIWYG (O que você vê é o que você tem)</p>
<p style="padding-left: 30px">Destaque de Sintaxes Definida pelo Usuário</p>
<p style="padding-left: 30px">Auto completar</p>
<p style="padding-left: 30px">Múltiplos Documentos</p>
<p style="padding-left: 30px">Múltiplas Visualizações</p>
<p style="padding-left: 30px">Suporta Expressões de Busca/Substituição</p>
<p style="padding-left: 30px">Suporta o Arrastar e Soltar</p>
<p style="padding-left: 30px">Posição Dinâmica de Visualizações</p>
<p style="padding-left: 30px">Auto detecção de Estado do Arquivo</p>
<p style="padding-left: 30px">Avanço/Recuo de Zoom</p>
<p style="padding-left: 30px">Ambiente com Suporte a Múltiplos Idiomas</p>
<p style="padding-left: 30px">Marcadores</p>
<p style="padding-left: 30px">Chaves, Colchetes e Parênteses com Destaque</p>
<p style="padding-left: 30px">Grava e Reproduz Macros</p>
<p>Como mencionei acima, este utilitário pode ainda ser personalizado com temas e da minha experiência de trabalho com eles é sem dúvida uma óptima ferramenta.</p>
<p>Para poderem descarregar e testar o Notepad ++ podem visitar o seguinte link:  <a title="Notepad ++" href="http://notepad-plus.sourceforge.net/br/site.htm" target="_blank">Notepad ++</a></p>
]]></content:encoded>
			<wfw:commentRss>http://programacao.maistemas.com/geral/editor-de-codigo-livre-notepad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Função para criar um array de categorias em forma de árvore &#8211; parte 2</title>
		<link>http://programacao.maistemas.com/php/funcao-para-criar-um-array-de-categorias-em-forma-de-arvore-parte-2/</link>
		<comments>http://programacao.maistemas.com/php/funcao-para-criar-um-array-de-categorias-em-forma-de-arvore-parte-2/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 13:29:27 +0000</pubDate>
		<dc:creator>barquero</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[array]]></category>

		<guid isPermaLink="false">http://programacao.maistemas.com/?p=43</guid>
		<description><![CDATA[Bem, em continuação do artigo anterior onde mostrei como preparar um array para a construção de uma árvore de categorias, coloco agora outra parte onde vamos, usando esse array, colocar todas as categorias na página, e nos seus devidos lugares.
Não vou usar qualquer tipo de CSS neste momento para poder facilitar a compreensão da função, [...]]]></description>
			<content:encoded><![CDATA[<p>Bem, em continuação do artigo anterior onde mostrei como preparar um array para a construção de uma árvore de categorias, coloco agora outra parte onde vamos, usando esse array, colocar todas as categorias na página, e nos seus devidos lugares.</p>
<p>Não vou usar qualquer tipo de CSS neste momento para poder facilitar a compreensão da função, e, depois cada um poder usar o CSS como entender.</p>
<p>Então cá vai.</p>
<p>Depois de criado o array com todas as categorias e respectivas sub-categorias, apenas é necessário criar um &#8216;ciclo for&#8217; de forma a colocar tudo na pagina.</p>
<p>Sendo  que o array criado anteriormente era:</p>
<pre class="php">
<span class="htmlOtherTag">&lt;?
$tree=tree_to_folders($cat_array, 0, &quot;parent&quot;, &quot;name&quot;, SORT_ASC);
?&gt;</span>
</pre>
<p>Pegamos agora neste array e fazemos o ciclo de impressão:</p>
<pre class="php">
<span class="phpComment">/*Função que vai recorrer o array para imprimir na pagina<span class="phpKeyword"> as </span>categorias*/</span>
<span class="phpFunctionKeyword">function</span> recorre<span class="phpOperator">(</span>$tree<span class="phpOperator">)</span> <span class="phpOperator">{</span>
<span class="phpFunction">echo</span> <span class="phpString">"<span class="phpOperator">&lt;</span>ul<span class="phpOperator">&gt;</span>"</span><span class="phpText">;</span>
<span class="phpComment">/*procura e recorre os nomes no nivel actual */</span>
<span class="phpKeyword">
foreach </span><span class="phpOperator">(</span>$tree<span class="phpKeyword"> as </span>$id <span class="phpOperator"><span class="phpOperator">=</span><span class="phpOperator">&gt;</span></span> $subarray<span class="phpOperator">)</span> <span class="phpOperator">{</span>
<span class="phpFunction">echo</span> <span class="phpString">'<span class="phpOperator">&lt;</span>li<span class="phpOperator">&gt;</span>'</span>.$subarray<span class="phpOperator">[</span><span class="phpString">"name"</span><span class="phpOperator">]</span><span class="phpText">;</span>
<span class="phpComment">/* Verifica se esta categoria tem subcategorias, se sim, chama novamente a função*/</span>
<span class="phpKeyword">
if </span><span class="phpOperator">(</span><span class="phpFunction">sizeof</span><span class="phpOperator">(</span>$subarray<span class="phpOperator">[</span><span class="phpString">"folders"</span><span class="phpOperator">]</span><span class="phpOperator">)</span><span class="phpOperator">&gt;</span><span class="phpOperator">=</span><span class="phpNumber">1</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>
recorre<span class="phpOperator">(</span>$subarray<span class="phpOperator">[</span><span class="phpString">"folders"</span><span class="phpOperator">]</span><span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
<span class="phpFunction">echo</span> <span class="phpString">"<span class="phpOperator">&lt;</span>/li<span class="phpOperator">&gt;</span>"</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
<span class="phpFunction">echo</span> <span class="phpString">"<span class="phpOperator">&lt;</span>/ul<span class="phpOperator">&gt;</span>"</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
<span class="phpComment">/*chamamos a função para que inicie o processo*/</span>
recorre<span class="phpOperator">(</span>$tree<span class="phpOperator">)</span><span class="phpText">;</span>
</pre>
<p>Penso que ao colocar assim, sem CSS será bastante simples de entender o resultado final, que seria por exemplo:</p>
<ul>
<li>Categoria 1
<ul>
<li>Categoria 1.1</li>
<li>Categoria 1.2
<ul>
<li>Categoria 1.2.1</li>
<li>Categoria 1.2.2</li>
</ul>
</li>
<li>Categoria 1.3</li>
</ul>
</li>
<li>Catgoria 2
<ul>
<li>Categoria 2.1</li>
</ul>
</li>
<li>Categoria 3</li>
</ul>
<p>E por ai em diante.</p>
<p>Sem o CSS este será o aspecto real que vai aparecer na página, agora é uma questão de se aplicar alum CSS e algum JavaScript de forma a tornar a árvore mais bonita e apenas estar visivel inicialmente as categorias 0, ou seja, as categorias Pai e, mediante vamos clicando em cada uma mostrar ou ocultar as filhas.</p>
<p>Esta forma de fazer a árvore de categorias, como mencionei antes, tem como objectivo, que no código fonte da página já estejam lá todas as categorias, o que para os motores de busca é optimo porque teremos em vez de 10 categorias (as principais), teremos todas as categorias listadas na página, apenas ocultas por CSS.</p>
]]></content:encoded>
			<wfw:commentRss>http://programacao.maistemas.com/php/funcao-para-criar-um-array-de-categorias-em-forma-de-arvore-parte-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Função para criar um array de categorias em forma de árvore</title>
		<link>http://programacao.maistemas.com/php/funcao-para-criar-um-array-com-categorias-em-forma-de-arvore/</link>
		<comments>http://programacao.maistemas.com/php/funcao-para-criar-um-array-com-categorias-em-forma-de-arvore/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 16:33:57 +0000</pubDate>
		<dc:creator>barquero</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[array]]></category>

		<guid isPermaLink="false">http://programacao.maistemas.com/?p=27</guid>
		<description><![CDATA[Bem, cá vai a primeira dica para o blog  
Há alguns meses pediram-me para rever uma função que tinha como objectivo criar uma lista de categorias em árvore, a função até nem estava muito mal, quando apenas existia Pais e Filhos, ou seja 2 niveis de categorias. O problema era quando se inseria um [...]]]></description>
			<content:encoded><![CDATA[<p>Bem, cá vai a primeira dica para o blog <img src='http://programacao.maistemas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Há alguns meses pediram-me para rever uma função que tinha como objectivo criar uma lista de categorias em árvore, a função até nem estava muito mal, quando apenas existia Pais e Filhos, ou seja 2 niveis de categorias. O problema era quando se inseria um 3º nivel, ou mais.</p>
<p>Bem apos uns dias de teste e analise consegui melhor a funçã0, com uma tabela de teste com 771 categorias a função demorava por volta de 0.51 segundos, como disse até nem esta mau, mas se pensarmos em aumentar isto para 5000 categorias, seria complicado.</p>
<p>Logico que poderiamos fazer isto doutra forma, atraves de ajax por exemplo, carregando as filhas apenas quando se clicasse nos pais. Mas o que se pretendia era que toda a arvore fosse carregada de inicio (objectico indexação de palavras para o google), e depois atraves de CSS ir mostrando e ocultando as filhas.</p>
<p>Como disse ao fim de alguns dias, reduzi a função e o resultado para 0.0016 segundos.</p>
<p>Aqui fica a função, ou melhor as funções. Os comentários estão em ingles mas isso não deve ser problema:</p>
<p>1º passo, fazer o select á base de dados e criar um array com as categorias. Esta tabela é constituida pelos seguintes campos:</p>
<p>id &#8211; incremental, chave primaria</p>
<p>parent- campo inteiro, onde guardamos qual a categoria pai</p>
<p>name &#8211; nome da categoria</p>
<pre class="php">
<span class="phpScriptTag"><span class="phpOperator">&lt;</span><span class="phpOperator">?</span>php</span>
$cat_array <span class="phpOperator">=</span><span class="htmlText"> build_tree</span><span class="phpOperator">(</span><span class="phpString">'categories'</span>, <span class="phpString">'id, name, parent'</span>, <span class="phpString">'parent ASC, name ASC'</span>, <span class="phpString">'id'</span><span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpScriptTag"><span class="phpOperator">?</span><span class="phpOperator">&gt;</span></span>
</pre>
<p>Abaixo está a função build_tree, com os devidos comentários e explicações.</p>
<pre class="php">
<span class="phpScriptTag"><span class="phpOperator">&lt;</span><span class="phpOperator">?</span>php</span>
<span class="phpComment">/**
* Function build_tree<span class="phpOperator">(</span>$table, $fields, $fields_order, $master=<span class="phpString">'id'</span><span class="phpOperator">)</span>
*
* OVERVIEW<span class="phpOperator">:</span> Create a MultiDimensional Array with the data off a table
*
* RETURNS<span class="phpOperator">:</span> Returns a unique array with all the values
*
* EXAMPLE<span class="phpOperator">:</span> $tree=build_tree<span class="phpOperator">(</span><span class="phpString">'categories'</span>, <span class="phpString">'id, name, parent_id'</span> , <span class="phpString">'parent_id asc, name asc'</span>, <span class="phpString">'id'</span><span class="phpOperator">)</span><span class="phpText">;</span>
*
* @param string $table name to the database table
* @param string $fields name<span class="phpOperator">(</span><span class="htmlText">s</span><span class="phpOperator">)</span><span class="phpKeyword"> for </span>the table fields to get
* @param string $fields_order  sql order condition
* @param string $master name to the table unique key field, usualy id <span class="phpOperator">(</span><span class="htmlText">optional</span><span class="phpKeyword"> if </span><span class="htmlText">id is primary key value and unique</span><span class="phpOperator">)</span>
*/</span>
<span class="phpFunctionKeyword">function</span><span class="htmlText"> build_tree</span><span class="phpOperator">(</span>$table, $fields, $fields_order, $master=<span class="phpString">'id'</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>
<span class="phpComment">/* check<span class="phpKeyword"> if </span>fields order is set,<span class="phpKeyword"> if </span><span class="htmlText">not set 1st field</span><span class="phpKeyword"> as </span>asc order by*/</span>
<span class="phpKeyword">
if </span><span class="phpOperator">(</span>$fields_order<span class="phpOperator"><span class="phpOperator">=</span>=</span><span class="phpString">''</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>
$temp<span class="phpOperator">=</span><span class="phpFunction">explode</span><span class="phpOperator">(</span><span class="phpString">','</span> ,$fields<span class="phpOperator">)</span><span class="phpText">;</span>
$fields_order <span class="phpOperator">=</span> $temp<span class="phpOperator">[</span><span class="phpNumber">0</span><span class="phpOperator">]</span>.<span class="phpString">' asc'</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
<span class="phpComment">/* build the query */</span>
$query<span class="phpOperator">=</span><span class="phpFunction">mysql_query</span><span class="phpOperator">(</span><span class="phpString">'select '</span>.$fields<span class="phpOperator">.</span><span class="phpString">' from '</span>.$table.<span class="phpString">' order by '</span>.$fields_order<span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpComment">/* read the query  and build the array */</span>
<span class="phpKeyword">
while </span><span class="phpOperator">(</span>$result<span class="phpOperator">=</span><span class="phpFunction">mysql_fetch_assoc</span><span class="phpOperator">(</span>$query<span class="phpOperator">)</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>
<span class="phpComment">/* $result<span class="phpOperator">[</span>$master<span class="phpOperator">]</span> is the unique key value  */</span>
$tree<span class="phpOperator">[</span>$result<span class="phpOperator">[</span>$master<span class="phpOperator">]</span><span class="phpOperator">]</span><span class="phpOperator">=</span>$result;
<span class="phpOperator">}</span>
<span class="phpComment">/*<span class="phpKeyword"> return </span>the array */</span>
<span class="phpKeyword">
return </span>$tree<span class="phpText">;</span>
<span class="phpOperator">}</span>
<span class="phpScriptTag"><span class="phpOperator">?</span><span class="phpOperator">&gt;</span></span>
</pre>
<p>2º passo, chamar a função que vai criar o array com a estrutura pais, filhos, netos, etc., usando logicamente o array criado acima, $cat_array</p>
<pre class="php">
<span class="phpScriptTag"><span class="phpOperator">&lt;</span><span class="phpOperator">?</span>php</span>
$tree=tree_to_folders<span class="phpOperator">(</span>$cat_array, <span class="phpNumber">0</span>, <span class="phpString">'parent'</span>, <span class="phpString">'name'</span>, <span class="phpConstant">SORT_ASC</span><span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpScriptTag"><span class="phpOperator">?</span><span class="phpOperator">&gt;</span></span>
</pre>
<p>Aqui está a função, para converter em árvore e a respectiva ordenação:</p>
<pre class="php">
<span class="phpOperator">&lt;</span><span class="phpOperator">?</span>php
<span class="phpComment">/**
* Function tree_to_folders<span class="phpOperator">(</span>$tree, $root, $parent_var=<span class="phpString">'parent'</span>, $order=<span class="phpString">'id'</span>, $order_val=<span class="phpConstant">SORT_ASC</span><span class="phpOperator">)</span>
*
* OVERVIEW<span class="phpOperator">:</span> Create <span class="phpFunction">array</span> with the a category tree or a map tree
*
* RETURNS<span class="phpOperator">:</span> Returns a unique <span class="phpFunction">array</span> with the tree information
*
* EXAMPLE<span class="phpOperator">:</span> $links=tree_to_folders<span class="phpOperator">(</span>$tree, <span class="phpString">'<span class="phpNumber">0</span>'</span>, <span class="phpString">'parent'</span>, <span class="phpString">'name'</span>, <span class="phpConstant">SORT_DESC</span><span class="phpOperator">)</span><span class="phpText">;</span>
*
* @param <span class="phpFunction">array</span> $tree pre build tree <span class="phpFunction">array</span>
* @param string/integer $root id from the master parent we want to design the tree
* @param string $parent_var name to the parent field on the <span class="phpFunction">array</span> <span class="phpOperator">(</span>optional -<span class="phpKeyword"> default </span>value <span class="phpString">"padre"</span><span class="phpOperator">)</span>
* @param string $order name on the field on the <span class="phpFunction">array</span> to make the order <span class="phpOperator">(</span>optional - defalut value <span class="phpString">"id"</span><span class="phpOperator">)</span>
* @param string $order_val type or order we whant <span class="phpConstant">SORT_ASC</span>/<span class="phpConstant">SORT_DESC</span> <span class="phpOperator">(</span>optional<span class="phpKeyword"> default </span>value <span class="phpString">"<span class="phpConstant">SORT_ASC</span>"</span><span class="phpOperator">)</span>
*/</span>
<span class="phpFunctionKeyword">function</span> tree_to_folders<span class="phpOperator">(</span>$tree, $root, $parent_var=<span class="phpString">'parent'</span>, $order=<span class="phpString">'id'</span>, $order_val=<span class="phpConstant">SORT_ASC</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>
<span class="phpKeyword">
foreach </span><span class="phpOperator">(</span>$tree<span class="phpKeyword"> as </span>$id <span class="phpOperator"><span class="phpOperator">=</span><span class="phpOperator">&gt;</span></span> $sub<span class="phpFunction">array</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>
<span class="phpKeyword">
if </span><span class="phpOperator">(</span>$sub<span class="phpFunction">array</span><span class="phpOperator">[</span>$parent_var<span class="phpOperator">]</span> <span class="phpOperator">!</span><span class="phpOperator">=</span> $root<span class="phpOperator">)</span> <span class="phpOperator">{</span>
<span class="phpKeyword">
if </span><span class="phpOperator">(</span><span class="phpFunction">isset</span><span class="phpOperator">(</span>$tree_result<span class="phpOperator">[</span>$sub<span class="phpFunction">array</span><span class="phpOperator">[</span>$parent_var<span class="phpOperator">]</span><span class="phpOperator">]</span><span class="phpOperator">)</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>
$tree_result<span class="phpOperator">[</span>$sub<span class="phpFunction">array</span><span class="phpOperator">[</span>$parent_var<span class="phpOperator">]</span><span class="phpOperator">]</span><span class="phpOperator">[</span><span class="phpString">'folders'</span><span class="phpOperator">]</span><span class="phpOperator">[</span>$sub<span class="phpFunction">array</span><span class="phpOperator">[</span><span class="phpString">'id'</span><span class="phpOperator">]</span><span class="phpOperator">]</span><span class="phpOperator">=</span>$tree<span class="phpOperator">[</span>$id<span class="phpOperator">]</span><span class="phpText">;</span>
<span class="phpOperator">}</span><span class="phpKeyword"> else </span><span class="phpOperator">{</span>
$flag<span class="phpOperator">=</span>0;
$valid<span class="phpOperator">=</span>$id<span class="phpText">;</span>
$var=<span class="phpString">''</span><span class="phpText">;</span>
<span class="phpKeyword">
while </span><span class="phpOperator">(</span>$flag<span class="phpOperator"><span class="phpOperator">=</span>=</span><span class="phpNumber">0</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>
<span class="phpKeyword">
if </span><span class="phpOperator">(</span><span class="phpFunction">isset</span><span class="phpOperator">(</span>$tree<span class="phpOperator">[</span>$valid<span class="phpOperator">]</span><span class="phpOperator">)</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>
<span class="phpKeyword">
if </span><span class="phpOperator">(</span>$tree<span class="phpOperator">[</span>$valid<span class="phpOperator">]</span><span class="phpOperator">[</span>$parent_var<span class="phpOperator">]</span><span class="phpOperator">!</span><span class="phpOperator">=</span><span class="phpString">'<span class="phpNumber">0</span>'</span> <span class="phpOperator">)</span> <span class="phpOperator">{</span>
$var=<span class="phpString">"<span class="phpOperator">[</span><span class="phpString">'folders'</span><span class="phpOperator">]</span><span class="phpOperator">[</span><span class="phpString">'". $tree[$valid]['id']."'</span><span class="phpOperator">]</span>"</span>.$var<span class="phpText">;</span>
<span class="phpOperator">}</span><span class="phpKeyword"> else </span><span class="phpOperator">{</span>
$var=<span class="phpString">'<span class="phpOperator">[</span><span class="phpString">"'</span>. $tree<span class="phpOperator">[</span>$valid<span class="phpOperator">]</span><span class="phpOperator">[</span><span class="phpString">'id'</span><span class="phpOperator">]</span> <span class="phpOperator">.</span><span class="phpString">'"</span><span class="phpOperator">]</span>'</span>.$var<span class="phpText">;</span>
$flag<span class="phpOperator">=</span><span class="phpNumber">1</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
$valid<span class="phpOperator">=</span>$tree<span class="phpOperator">[</span>$valid<span class="phpOperator">]</span><span class="phpOperator">[</span>$parent_var<span class="phpOperator">]</span><span class="phpText">;</span>
<span class="phpOperator">}</span><span class="phpKeyword"> else </span><span class="phpOperator">{</span>
$flag<span class="phpOperator">=</span><span class="phpNumber">1</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
<span class="phpOperator">}</span>
$var=<span class="phpString">'$tree_result'</span>.$var.<span class="phpString">'<span class="phpOperator">=</span>$tree<span class="phpOperator">[</span>$id<span class="phpOperator">]</span><span class="phpText">;</span>'</span><span class="phpText">;</span>
<span class="phpFunction">eval</span><span class="phpOperator">(</span>$var<span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
<span class="phpOperator">}</span><span class="phpKeyword"> else </span><span class="phpOperator">{</span>
$tree_result<span class="phpOperator">[</span>$tree<span class="phpOperator">[</span>$id<span class="phpOperator">]</span><span class="phpOperator">[</span><span class="phpString">'id'</span><span class="phpOperator">]</span><span class="phpOperator">]</span><span class="phpOperator">=</span>$tree<span class="phpOperator">[</span>$id<span class="phpOperator">]</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
<span class="phpOperator">}</span>
$tree_result<span class="phpOperator">=</span>order_tree<span class="phpOperator">(</span>$tree_result,$order, $order_val<span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpKeyword">
return </span>$tree_result;
<span class="phpOperator">}</span>
<span class="phpFunctionKeyword">function</span> order_tree<span class="phpOperator">(</span>$tree, $order, $order_val <span class="phpOperator">)</span><span class="phpOperator">{</span>
<span class="phpKeyword">
foreach </span><span class="phpOperator">(</span>$tree<span class="phpKeyword"> as </span>$key <span class="phpOperator"><span class="phpOperator">=</span><span class="phpOperator">&gt;</span></span> $row<span class="phpOperator">)</span> <span class="phpOperator">{</span>
$ordered<span class="phpOperator">[</span>$key<span class="phpOperator">]</span> <span class="phpOperator">=</span> $row<span class="phpOperator">[</span>$order<span class="phpOperator">]</span><span class="phpText">;</span>
<span class="phpKeyword">
if </span><span class="phpOperator">(</span><span class="phpFunction">isset</span><span class="phpOperator">(</span>$tree<span class="phpOperator">[</span>$key<span class="phpOperator">]</span><span class="phpOperator">[</span><span class="phpString">"folders"</span><span class="phpOperator">]</span><span class="phpOperator">)</span><span class="phpOperator">)</span> <span class="phpOperator">{</span>
$tree<span class="phpOperator">[</span>$key<span class="phpOperator">]</span><span class="phpOperator">[</span><span class="phpString">'folders'</span><span class="phpOperator">]</span><span class="phpOperator">=</span>order_tree<span class="phpOperator">(</span>$tree<span class="phpOperator">[</span>$key<span class="phpOperator">]</span><span class="phpOperator">[</span><span class="phpString">'folders'</span><span class="phpOperator">]</span>, $order, $order_val<span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpOperator">}</span>
<span class="phpOperator">}</span>
<span class="phpFunction">array_multisort</span><span class="phpOperator">(</span>$ordered, $order_val, $tree<span class="phpOperator">)</span><span class="phpText">;</span>
<span class="phpKeyword">
return </span>$tree<span class="phpText">;</span>
<span class="phpOperator">}</span>
</pre>
<p>Agora seria apenas necessário fazer um ciclo para mostrar as categorias, mas isso fica para outro dia <img src='http://programacao.maistemas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://programacao.maistemas.com/php/funcao-para-criar-um-array-com-categorias-em-forma-de-arvore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bem vindo</title>
		<link>http://programacao.maistemas.com/geral/teste/</link>
		<comments>http://programacao.maistemas.com/geral/teste/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 10:12:12 +0000</pubDate>
		<dc:creator>barquero</dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false">http://programacao.maistemas.com/?p=4</guid>
		<description><![CDATA[Olá, neste blog vamos tentar reunir informação útil acerca da temática programação.
Provavelmente vamos focar os temas em linguagens de programação que estejam ligadas com a Internet, isto porque, opinião pessoal, é para onde desde já há algum tempo mais pessoas se estão a focar e a direccionar todas as atenções.
O meu nome é Henrique Barquero, [...]]]></description>
			<content:encoded><![CDATA[<p>Olá, neste blog vamos tentar reunir informação útil acerca da temática programação.</p>
<p>Provavelmente vamos focar os temas em linguagens de programação que estejam ligadas com a Internet, isto porque, opinião pessoal, é para onde desde já há algum tempo mais pessoas se estão a focar e a direccionar todas as atenções.</p>
<p>O meu nome é Henrique Barquero, e trabalho na área de programação há mais de 15 anos, não me considero um expert, mas sim um entusiasta da área, visto que é dela que vivo <img src='http://programacao.maistemas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Além de ser o responsável principal pela criação da plataforma http://maistemas.com, tenho centenas de sites criados por mim, tenho dezenas de estruturas para quase todos os tipos de sites, e actualmente estou a desenvolver uma plataforma para uma empresa de formação online que é sem margem de dúvida o mair desafio que já tive até hoje, principalmente quando se esta a desenvolver esta plataforma do zero e sozinho.</p>
<p>Bem já chega de me gabar <img src='http://programacao.maistemas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  vou tentar colocar neste blog o máximo de informação possível relacionada com esta temática e espero que posso servir de ajuda aos interessados pela área.</p>
<p>Nota: Se gostava de fazer parte deste blog, e poder juntar-se a mim escrevendo sobre esta temática, visite o site <a title="Maistemas.com - Seja pago por escrever" href="http://maistemas.com" target="_blank">http://maistemas.com</a> leia a informação da página inicial e candidate-se a autor na página Autores.</p>
]]></content:encoded>
			<wfw:commentRss>http://programacao.maistemas.com/geral/teste/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

