<?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>Technócil</title>
	<atom:link href="http://technocil.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://technocil.com</link>
	<description></description>
	<lastBuildDate>Sun, 21 Feb 2010 13:49:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Magento E-Commerce</title>
		<link>http://technocil.com/2010/02/21/magento-e-commerce/</link>
		<comments>http://technocil.com/2010/02/21/magento-e-commerce/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 13:49:57 +0000</pubDate>
		<dc:creator>João Vagner</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[varien]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=341</guid>
		<description><![CDATA[Quem nunca ouviu falar hoje em dia de uma das ferramentas mais completas para e-commerce disponíveis gratuitamente, se você nunca ouviu falar, esta na hora de de atualizar hein?

O Magento se tornou hoje a principal ferramenta para comercio eletrônico, alem de completo, tem a robustez do Zend Framework, e diversos conceitos de ecommerce e SEO [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->Quem nunca ouviu falar hoje em dia de uma das ferramentas mais completas para e-commerce disponíveis gratuitamente, se você nunca ouviu falar, esta na hora de de atualizar hein?</p>
<p><img class="alignleft" src="http://www.magentocommerce.com/img/logo.gif" alt=" Magento Ecommece" /></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } -->O Magento se tornou hoje a principal ferramenta para comercio eletrônico, alem de completo, tem a robustez do Zend Framework, e diversos conceitos de ecommerce e SEO otimizados. Tudo, quer dizer, quase tudo hoje se faz no magento sem muitas dificuldades. Alem do Zend Framework por  traz em seu código, ele implementa todas as possibilidades do <a href="http://pear.php.net/">Pear</a>, traz consigo uma estrutura de canais para módulos aonde a comunidade desenvolve, e você pode usufruir muito bem através de alguns comandos práticos e simples.</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->O Magento também esta disponível por SVN, o que facilita muito o desenvolvimento, e um padrão / qualidade de código excelente. As instalações do magento são simples, e pode ser feita muito simplesmente por qualquer um com acesso ao SSH da conta. Praticidade total. O Próximo artigo dessa serie sera a instalação e configuração básica da loja, cache, e módulos Claro, depois de nossa introdução a alguns conceitos aplicados pelo magento, tanto em código, quanto em uso de sistema.</p>
<h2>1 &#8211; Estrutura básica de trabalho.</h2>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } -->Existe um bom senso para se trabalhar com o magento, uma estrutura compartilhada segura muito bem, claro, desde que configurado para se tornar leve, trabalhar com cache.  <a href="http://www.magentocommerce.com/system-requirements">Veja aqui os requisitos que o magento necessita para um BOM desempenho em produção.</a> Mas iremos ver isso mais para a frente. Agora e hora da nossa introdução a pastas do Magento. Pastas nos quais iremos ter acesso para upload e modificação de arquivos.</p>
<ul>
<li>app  <em>- Pasta da sua aplicação</em>
<ul>
<li>code - <em>Pasta do seus modulos</em>
<ul>
<li>comunity</li>
<li>core</li>
<li>local</li>
</ul>
</li>
<li>design -<em> Pasta aonde toda a estrutura de layout, blocos,  xml e xhtml (.phtml), sao armazenados</em>
<ul>
<li>adminhtml</li>
<li><strong>frontend</strong></li>
<li>install</li>
</ul>
</li>
<li>etc &#8211; <em>Pasta de XML de configurações de sua loja</em></li>
<li>locale &#8211; <em>Pasta com as linguas instaladas em sua Loja, tipo pt_BR, En, fr_FR, etc</em></li>
</ul>
</li>
<li>media &#8211; Pasta aonde as imagens do seu catalogo sao armazenadas, recortadas e trabalhadas.</li>
<li>var &#8211; Pasta de exportação de dados, backups do banco e etc</li>
<li>skin &#8211; Pasta aonde encontrados o css, javascript e imagem relativa a nosso tema.
<ul>
<li>adminhtml</li>
<li><strong>frontend</strong></li>
<li>install</li>
</ul>
</li>
</ul>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->Se você for curioso deve estar se perguntando  porque as pastas <strong>frontend estão</strong> com enfase, simples, porque são elas as responsáveis por nosso front-end, html, css, javascript, blocos, etc. Ali e onde a magica ocorre e o template ou tema toma vida.</p>
<p>Pronto, agora já visto a estrutura de pasta do magento, você já sabe aonde e porque deve mexer, cada coisas em seus lugares formando uma plataforma versátil de comercio eletrônico.</p>
<h2>2 &#8211; O Conceito de &#8220;EAV&#8221; e  Base de Dados.</h2>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->O magento trabalha com modelo de EAV em suas tabelas. Agora você desenvolvedor deve estar pensando que a coisa esta se complicando.  Na verdade esta simplificando. Entramos agora no conceito de <strong>E</strong>ntity-<strong>A</strong>ttribute-<strong>V</strong>alue.</p>
<p>O Modelo proposto de EAV e totalmente oposto da modelagem comum, O modelo simples de modelagem seguindo o ER, no futuro traz alguns obstáculos quando  possui uma evolução constante, e muita vezes o modelo de dados tem que se adaptar as novas regras do jogo, e do em questão de compatibilidade, isso se torna bem ruim.</p>
<p><img src="http://weblogs.sqlteam.com/images/weblogs_sqlteam_com/davidm/87/r_Exploded.Jpg" alt="Example EAV Model" /></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->O Conceito básico do EAV e simples, tenha como ideia guardar o Objeto, o atributo e seus valores de atributos. Você esta bem blindado de mudança nas regras do jogo, pois seu modelo baseado em EAV se adapta com muita facilidade a sua necessidade.</p>
<p>Alguns consideram esse modelo de EAV um erro, eu vejo como um obra prima de engenharia de software. Alem de bem projetado, e muito organizado e sistemático, e possui uma ótima flexibilidade.</p>
<h2>2 &#8211; Instalação, controle de versão e Magento Connect</h2>
<p>O Magento traz soluções maravilhosas para melhorar as tarefas mais chatas dos sistemas hoje disponíveis. A instalação, Upgrades e Updates.</p>
<h3>Subversion (SVN)</h3>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->Atualmente você pode fazer um checkout do projeto usando subversion (SVN), que permite flexilidade um bom controle do desenvolvimento e avanços do projeto. Para quem usa Linux e não tem ainda o subversion, basta executar os comandos abaixo:</p>
<p>Vale a dica que para que instalações locais funcionem direitinho, e necessário o uso do Virtual Hosts, porem isso no apache 2 + Linux se torna pratico.</p>
<blockquote><p>$: sudo apt-get install subversion</p></blockquote>
<p>Confirme a instalação dos pacotes necessários, depois basta ir na sua pasta padrão do apache, no meu caso sempre fica na home, chamada sites:</p>
<blockquote><p>$: cd ~/joaovagner/sites/;<br />
$: mkdir magento ;<br />
$: cd magento ;</p></blockquote>
<p>Pronto, já possui sua pasta para o magento, basta agora fazer  o checkout do projeto:</p>
<blockquote><p>$: svn checkout http://svn.magentocommerce.com/source/branches/1.4</p></blockquote>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->Pronto, já possui um branche do projeto, ou seja, ele esta pronto para rodar, agora caso queira manter uma workcopy basta fazer checkout do trunk, sempre em desenvolvimento, para isso recomendo uma criação de uma pasta para se manter organizado:</p>
<blockquote><p>$: cd ~/joaovagner/sites/;<br />
$: mkdir magento-trunk ;<br />
$: cd magento-trunk;</p></blockquote>
<p>Agora basta executar o checkout do trunk:</p>
<blockquote><p>$: svn checkout http://svn.magentocommerce.com/source/branches/1.4-trunk</p></blockquote>
<h3>Instalação via SSH</h3>
<p>A instalação por SSH se baseia simplesmente em comandos de download, <a href="http://www.magentocommerce.com/wiki/groups/227/installing_magento_via_shell_ssh">disponivel aqui</a>.</p>
<p>Abaixo os comandos necessários usando wget:</p>
<blockquote><p>//Acesso minha pasta padrão do apache<br />
$: cd ~/joaomedeiros/sites</p>
<p>//Crio uma pasta para o magento<br />
$: mkdir magento</p>
<p>//Acesso a pasta que criei<br />
$: cd magento</p>
<p>//Uso wget para fazer o download dos pacotes, tanto o magento em sí como o arquivo de dados de exemplos<br />
$: wget http://www.magentocommerce.com/downloads/assets/1.4.0.0/magento-1.4.0.0.tar.gz<br />
$: wget http://www.magentocommerce.com/downloads/assets/1.2.0/magento-sample-data-1.2.0.tar.gz</p>
<p>//Descompactação dos pacotes baixados<br />
$: tar -zxvf magento-1.4.0.0.tar.gz<br />
$: tar -zxvf magento-sample-data-1.2.0.tar.gz</p>
<p>// Movemos as imagens de exemplo para a pasta correnta de media<br />
$: mv magento-sample-data-1.2.0/media/* magento/media/</p>
<p>//movendo os registros no banco de exemplo para a a pasta magento</p>
<p>$: mv magento-sample-data-1.2.0/magento_sample_data_for_1.2.0.sql magento/data.sql</p>
<p>//Movendo o .htaccess para interpretação de regras personalizáveis do magento<br />
$: mv magento/* magento/.htaccess .</p>
<p>//Setando permissão de escritas na pasta correta, pois a instalação vai precisar<br />
$: chmod o+w var var/.htaccess app/etc</p>
<p>//Permissão recursiva na pasta de media de imagens de produtos do magento.<br />
$: chmod -R o+w media</p>
<p>//Aqui eu uso o .SQL para inserir dados de exemplo de produtos + CMS + homepage.<br />
$: mysql -h localhost -u seuuserdobanco -psuasenha magento_database &lt; data.sql</p>
<p>//Atualização de pacotes e instalação do canal de upgrade e update do magento connect no pear.<br />
$: ./pear mage-setup .<br />
$: ./pear install magento-core/Mage_All_Latest-stable</p>
<p>//Limpando todos os arquivos desnecessários<br />
$: rm -rf downloader/pearlib/cache/* downloader/pearlib/download/*<br />
$: rm -rf magento/ magento-sample-data-1.2.0/<br />
$: rm -rf magento-1.4.0.0.tar.gz magento-sample-data-1.2.0.tar.gz data.sql</p></blockquote>
<p>Caso esteja em um MAC OS e não possua o Wget, basta usar o CURL, uma alternativa que funciona basicamente como alternativa ao wget, basta substituir o wget por curl -O</p>
<blockquote><p>//mesmo efeito que o wget<br />
$: curl -O http://www.magentocommerce.com/downloads/assets/1.4.0.0/magento-1.4.0.0.tar.gz<br />
$: curl -O http://www.magentocommerce.com/downloads/assets/1.2.0/magento-sample-data-1.2.0.tar.gz</p></blockquote>
<p>Pronto, agora basta acessar a URL localhost e executar a instalação, claro, novamente recomendo o uso do Virtual Hosts para que isso possa fluir melhor.</p>
<p>Agora basta acessar, ai: <a href="http://magento.localhost/">http://magento.localhost/</a> (Interpretando que esse e seu virtual host!)</p>
<p>Caso você utilize Windows, pode usar o pacote <a href="http://www.magentocommerce.com/download">Magento and Zend Server &#8211; Unified Installer </a> e executar sua instalação no Windows com Zend Server e já um pacote do Magento. Eu nunca executei tal teste, não tenho certeza de como funciona e os passos!</p>
<h2>Dicas e macetes em problemas de Instalações + Permissões</h2>
<p>Como ja venho a tempos executando instalações, entendendo os processos e funcionalidades do magento, venho já armazenando e guardando alguns macetes de problemas recorrentes que enfrento, tanto em servidores conhecidos da IW2 como em terceiros, e as vezes ate localmente.</p>
<h3>Instalação e erro 505</h3>
<p>Comigo sempre ocorre de um upgrade ou nova instalação, ocorrer erro500, o famoso &#8220;Internal Server Error&#8221;, isso pode ser corrigido com Shell Script:</p>
<blockquote><p>$: cd magento ;<br />
$: find . -type d -print | xargs chmod 755<br />
$: find . -type f -print0 | xargs -0 -n1 chmod 644<br />
$: chmod 775 app/etc var var/.htaccess &amp;&amp; chmod -R 775 media</p></blockquote>
<p>Problema Resolvido</p>
<h3>Menu Administrativo parou de funcionar! O Que eu faço?!</h3>
<p>Esse problema ocorre devido a compilação do javascript, e simples resolver, e já e um problema frequente:</p>
<p><strong>Passo 1</strong> &#8211; Abrir o Arquivo com problema</p>
<p>O Arquivo que esta causando esse problema se localiza na seguinte path: <em>app/code/core/Mage/Page/Block/Html/Head.php</em></p>
<p>Basta renomear o Head.php para head.php. No Terminal basta executar o comando mv:</p>
<blockquote><p>$: cd magento;<br />
$: mv pp/code/core/Mage/Page/Block/Html/Head.php   app/code/core/Mage/Page/Block/Html/head.php</p></blockquote>
<p><strong>Passo 2 </strong>- Permissões corretas</p>
<p>Esses arquivos precisam de permissões corretas para que o Browser tenha o retorno necessário:</p>
<blockquote><p>$: cd magento;<br />
$: chmod 755 js/ ;<br />
$: chmod 644 js/lib/ ;<br />
$: chmod 644 js/index.php ;</p></blockquote>
<p>Pronto, seu menu está perfeito! Seu Magento esta pronto para trabalhar!</p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2010/02/21/magento-e-commerce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pequena &#8220;Introdução&#8221; a comandos linux.</title>
		<link>http://technocil.com/2009/12/20/pequena-introducao-a-comandos-linux/</link>
		<comments>http://technocil.com/2009/12/20/pequena-introducao-a-comandos-linux/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 13:16:41 +0000</pubDate>
		<dc:creator>João Vagner</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[comandos]]></category>
		<category><![CDATA[utilidades]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=339</guid>
		<description><![CDATA[Calma gente, não e so o buda que escreve não, nao esqueci de vocês não!
$: Existem facilidades ao uso da plataforma Mac Os, e Linux, como os dois são baseados em Unix, seus comandos são os mesmos, alguns sao muito bons, e irei fazer uma lista de usos dos mesmos para facilitar a vida de [...]]]></description>
			<content:encoded><![CDATA[<p>Calma gente, não e so o buda que escreve não, nao esqueci de vocês não!</p>
<p>$: Existem facilidades ao uso da plataforma Mac Os, e Linux, como os dois são baseados em Unix, seus comandos são os mesmos, alguns sao muito bons, e irei fazer uma lista de usos dos mesmos para facilitar a vida de quem esta iniciando em um Ubuntu ou Mac os. Alguns comandos sao simples, apesar disso, ainda pouco utilizados.</p>
<p><strong>SCP &#8211; Secure Copy </strong><br />
Uso Comum:<br />
$: scp meuarquivo.txt usuario@computador_ou_ip: /pasta/arquivo\</p>
<p>Com recurso de modificação da porta:<br />
$: scp minhapasta/ usuario@ip_ou_computador: /pasta/destino/ -p 92366</p>
<p><strong>Unzip &#8211; Decompress file </strong><br />
uso comum:<br />
$: unzip arquivo.zip</p>
<p>Uso com criação de pasta:<br />
$: unzip -qd arquivo.zip</p>
<p><strong>Mysql Dump &#8211; Dump Databases </strong><br />
Uso comum:<br />
$: mysql -h localhost -u root -psenha minha-base &gt; arquivo.sql</p>
<p>Uso comum para todas as bases:<br />
$: mysql -h localhost -u root -psenha &#8211;all-databases &gt; arquivo.sql<br />
<em>Nota: Note que o -p = senha, e sempre colado no -p mesmo. Sendo assim -psuasenha.</em></p>
<p><strong>Cal &#8211; Simples Calendario no Shell </strong><br />
Uso comum:<br />
$: cal</p>
<p>Retorno: </p>
<blockquote><p>December 2009<br />
Su Mo Tu We Th Fr Sa<br />
1  2  3  4  5<br />
6  7  8  9 10 11 12<br />
13 14 15 16 17 18 19<br />
20 21 22 23 24 25 26<br />
27 28 29 30 31</p>
</blockquote>
<p>Para obter dos ultimos 3 meses:<br />
$: cal -3</p>
<p>Para obter os calendarios de algum mes de um ano anterior:<br />
$: cal 10 2000</p>
<blockquote><p>October 2000<br />
Su Mo Tu We Th Fr Sa<br />
1  2  3  4  5  6  7<br />
8  9 10 11 12 13 14<br />
15 16 17 18 19 20 21<br />
22 23 24 25 26 27 28<br />
29 30 31</p>
</blockquote>
<p>Nota: Para outros formatos consulte: cal &#8211;help.</p>
<p><strong> Find &#8211; Obtenha resultados rapidamente!</strong><br />
Consulta rapida na pasta para um arquivo: </p>
<p>$: find -name &#8216;meu_arquivo.htm&#8217;</p>
<p>Ou<br />
Consulta geral para um arquivo:<br />
$: find / -name &#8216;meu_arquivo.htm&#8217;</p>
<p>Nota: Isso pode ser bem demorado&#8230; Recomendo algo como indicar a pasta para otimizar o resultado da busca:<br />
$: find /home/meuperfil -name &#8216;meu_arquivo.htm&#8217; ;</p>
<p>Você tambem pode procurar por tamanho de arquivo:<br />
$: find -name &#8216;*&#8217; -size +1000k</p>
<p>Ou caso nao lembre o tipo de arquivo, somente parte do nome:<br />
$: find -name &#8216;meu_arquivo*&#8217;</p>
<p>O retorno e algo como: </p>
<blockquote><p>meu_arquivo.htm,<br />
meu_arquivo.txt,<br />
meu_arquivo.png &#8230;..</p>
</blockquote>
<p>Bom, essa lista so tende a crescer, em breve, irei atualizando e informando que a mesma foi atualizada, ou pelo twitter ou em novos posts ;)</p>
<p>Caso queiram contribuir com seus comandos mais usados e praticados, para facilitar a vida, basta ir enviando nos comentarios e irei adicionando.</p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/12/20/pequena-introducao-a-comandos-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Uma forma &#8220;diferente&#8221; de explicar OOP</title>
		<link>http://technocil.com/2009/12/15/uma-forma-diferente-de-explicar-oop/</link>
		<comments>http://technocil.com/2009/12/15/uma-forma-diferente-de-explicar-oop/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 19:56:53 +0000</pubDate>
		<dc:creator>Tobias</dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=301</guid>
		<description><![CDATA[E ae gente, blz?
Então, antes de começar eu vou explicar daonde saiu a idéia desse post. Um belo dia de trabalho normal, entre uma tarefa em outra um amigo me chama no msn pra tirar dúvidas, tentei explicar o que ele precisa fazer pra resolver o problema dele e depois de algum tempo ele entendeu, [...]]]></description>
			<content:encoded><![CDATA[<p>E ae gente, blz?<br />
Então, antes de começar eu vou explicar daonde saiu a idéia desse post. Um belo dia de trabalho normal, entre uma tarefa em outra um amigo me chama no msn pra tirar dúvidas, tentei explicar o que ele precisa fazer pra resolver o problema dele e depois de algum tempo ele entendeu, ta até ai tudo blz, e quando o problema ja estava resolvido ele solta a seguinte frase:</p>
<p><em>&#8220;P#%#$, nunca entendi direito o que é método ou atributo nessas paradas de oo, é por isso que eu me enrolo tanto, me explica ae.&#8221;</em></p>
<p>Ouvindo isso eu pensei, como eu vou fazer pra <span style="text-decoration: line-through;">essa anta</span> esse meu amigo entender esse conceito de forma rápida?</p>
<p>Ele mesmo me respondeu sem querer com a seguinte mensagem: (sim, o assunto muda rápido mesmo)<br />
<em>&#8220;&#8230; Aew, tu viu aquela morena gostosa do BBB? C@#$@#$ ela é muito boa mesmo&#8230;&#8221;</em></p>
<p>Pronto, o jeito mais prático de explicar os conceitos de OO pra esse cara seria utilizando mulheres como exemplo, <span style="text-decoration: line-through;">wtf?</span> sim, sim, e acreditem funcionou muito bem os exemplos e a idéia me pareceu tão boa que valeu um post aqui.</p>
<p>História contada então vamos ao que interessa.</p>
<p>Vejamos a foto abaixo:</p>
<p><img class="alignnone size-full wp-image-325" title="hitomi_tanaka_2" src="http://technocil.com/wp-content/uploads/2009/12/hitomi_tanaka_2.jpg" alt="hitomi_tanaka_2" width="520" height="327" /></p>
<p>Essa coisinha bunita da foto acima é a Hitomi e ela vai ajudar a gente a aprender o que é o que em Orientação a Objetos. Então olhamos a foto e vemos? uma gostosa&#8230; deitada num sofá&#8230; então,&#8230; o sofá tem 4 pernas, 1 estofamento&#8230; calma, calma, to só brincando.</p>
<p>A primeira coisa que precisamos entender quando vamos programar orientado a objeto são os atributos, <span style="text-decoration: line-through;">e que atributos amigo</span>.</p>
<p>Pensando nisso teriamos a seguinte classe para a foto acima:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> HitomiTanaka
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">//Atributos realmente importantes</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$peitos</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'KING SIZE'</span><span style="color: #339933;">;</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$bunda</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Na medida'</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//Atributos importantes mas que passam batido na visão</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$olhos</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Castanhos'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//Se tiver errado me perdõe, não consigo vê-los tempo suficiente sem desviar a visao na foto acima</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$cabelo</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Castanho'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//idem ao anterior</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$peso</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'50kg'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//Não faço idéia, mas acho que ela não ia ficar triste com esse chute :P</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$roupas</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Vestidinho Roxo'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//Aqui o defaul poderia ser &quot;nenhuma&quot;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Isso da pra ter uma noção do que são atributos numa classe certo? </p>
<p>Sabendo disso, vamos por a mente pervertida pra trabalhar e pensar nos métodos, que são nada mais nada menos que as ações, coisas que a classe faz.</p>
<p>Olhe novamente outra foto da hitomi, dessa vez mostrando um pouco mais os atributos&#8230;</p>
<p><img class="alignnone size-full wp-image-332" title="pic.php" src="http://technocil.com/wp-content/uploads/2009/12/pic.php_.jpg" alt="pic.php" width="200" height="266" /></p>
<p>Olhando a foto acima, e depois de censurar um pouco os meus pensamentos, achei métodos que poderiam ser incluídos nesse post, estão na classe abaixo.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> HitomiTanaka
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">//Atributos realmente importantes</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$peitos</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'KING SIZE'</span><span style="color: #339933;">;</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$bunda</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Na medida'</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//Atributos importantes mas que passam batido na visão</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$olhos</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Castanhos'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//Se tiver errado me perdõe, não consigo vê-los tempo suficiente sem desviar a visao na foto acima</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$cabelo</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Castanho'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//idem ao anterior</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$peso</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'50kg'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//Não faço idéia, mas acho que ela não ia ficar triste com esse chute :P</span>
  protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$roupas</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Vestidinho Roxo'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//Aqui o defaul poderia ser &quot;nenhuma&quot;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> mostrar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$parteDoCorpo</span><span style="color: #009900;">&#41;</span> 
  <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//Aqui ficaria toda a rotina de desabotoar ou abaixar o sutian...</span>
  <span style="color: #009900;">&#125;</span>    
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> balancar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
  <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//Niiiiiice, Imaginem a única cena que presta do filme click...</span>
  <span style="color: #009900;">&#125;</span>    
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> striptease<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
  <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//Ahhhhhhhhh!!!!</span>
  <span style="color: #009900;">&#125;</span>    
&nbsp;
  <span style="color: #666666; font-style: italic;">/*
   Os outros 239 métodos que eu pensei envolveriam 
   interações com a classe Eu e seriam classificados como NSFW
   por isso não foram incluídos.
  */</span>  
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Então&#8230; serviu pra ter uma noção do que são métodos né? acho que sim&#8230; mas como exercício de fixação, deixo para os leitores a feliz tarefa de comentar métodos e atributos que poderiam ser incluídos na nossa classe.</p>
<p>E como sempre, dúvidas sugestões e qualquer outro puxão de orelha, comentários tão ai pra isso.</p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/12/15/uma-forma-diferente-de-explicar-oop/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Usando um player customizado para vídeos do youtube (javascript)</title>
		<link>http://technocil.com/2009/08/11/usando-um-player-customizado-para-videos-do-youtube-javascript/</link>
		<comments>http://technocil.com/2009/08/11/usando-um-player-customizado-para-videos-do-youtube-javascript/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 01:47:58 +0000</pubDate>
		<dc:creator>Tobias</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[customizando]]></category>
		<category><![CDATA[player]]></category>
		<category><![CDATA[videoplayer]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=323</guid>
		<description><![CDATA[E ae gente, blz&#8230;
Como sempre depois de alguns milênios sem postar estou de volta, o título do post já diz tudo, mas de qualquer maneira vai aqui uma introdução do post de hoje. Vamos ver um exemplo de uso da API do youtube, como comandar o vídeo utilizando somente javascript, vale ressaltar que a unica [...]]]></description>
			<content:encoded><![CDATA[<p>E ae gente, blz&#8230;</p>
<p>Como sempre depois de alguns milênios sem postar estou de volta, o título do post já diz tudo, mas de qualquer maneira vai aqui uma introdução do post de hoje. Vamos ver um exemplo de uso da API do youtube, como comandar o vídeo utilizando somente javascript, vale ressaltar que a unica coisa em flash usada no player vai ser justamente o vídeo, todo o resto é javascript, html e css, &#8220;conversando&#8221; com a api do youtube&#8230;</p>
<p>Então vamos ao que interessa.</p>
<p>Antes de mais nada é bom ressaltar que o youtube tem uma API que na minha opinião é excelente e pode ser usada para diversas coisas do site, não só para assistir/usar os vídeos mas também para criar uma busca personalizada e outras coisinhas, para maiores informações <a href="http://code.google.com/intl/pt-BR/apis/youtube/overview.html" title="Página de apresentação da API do youtube">clique aqui</a></p>
<p>Nesse post só quero mostrar o que eles chamam de &#8220;chromeless player&#8221;, traduzindo ao pé da letra seria o player sem botoões, só a tela do vídeo, etc. Você pode ver um exemplo desse player <a href="http://code.google.com/intl/pt-BR/apis/youtube/chromeless_example_1.html" title="Exemplo do Chromeless player">aqui</a>.</p>
<p>Bom vasculhando o código fonte do exemplo a gente encontra um exemplo do que é possivel fazer com esse player, existem muitas funções que vão desde as mais básicas (como play, pause, stop) até algumas outras mais complexas como controle de volume e tempo do vídeo, no próximo post eu vou mostrar um exemplo utilizando jquery com direito a progress bar e controle de volume&#8230;</p>
<p>Como sempre puxões de orelha e correções são bem vindas nos comentários, abraços e até breve.</p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/08/11/usando-um-player-customizado-para-videos-do-youtube-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Encontro de desenvolvedores CAKE Sao Paulo</title>
		<link>http://technocil.com/2009/06/17/encontro-de-desenvolvedores-cake-sao-paulo/</link>
		<comments>http://technocil.com/2009/06/17/encontro-de-desenvolvedores-cake-sao-paulo/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 20:53:30 +0000</pubDate>
		<dc:creator>João Vagner</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=321</guid>
		<description><![CDATA[Bom dia pessoal, 
Estive presente no Encontro de desenvolvedores CAKE em Sao Paulo, e posso dizer que foi um bom encontro, palestras de nivel muito bom, aonde foi abordado desde a criação de um helper ate a criação, plugins, ambiente de testes, brincadeiras e criação com o bake. 
Algumas palestras em destaques para  TDD [...]]]></description>
			<content:encoded><![CDATA[<p>Bom dia pessoal, </p>
<p>Estive presente no Encontro de desenvolvedores CAKE em Sao Paulo, e posso dizer que foi um bom encontro, palestras de nivel muito bom, aonde foi abordado desde a criação de um helper ate a criação, plugins, ambiente de testes, brincadeiras e criação com o bake. </p>
<p>Algumas palestras em destaques para  TDD &#8211; Test-Driven Development e Testes Automatizados com CakePHP, aonde foram abordados assuntos que vem ja a algum tempo sendo levado em conta que e desde a engenharia de software ate a cobertura de testes dos codigos. Abordados tipos de testes: Unitarios, Aceitação, entre outros.  Palestras de <a href="http://blog.rodrigorm.com.br/">Rodrigo Moyle</a> e José Pedrini. </p>
<p>Apos isso uma outra palestra de nivel incrivel sobre criação e consumo de webservices com CAKEPHP que foi criado e desenvolvido um webservive utilizando REST. Parabéns ao Carlos Pires da <a href="http://2km.com.br/">2KM</a> que veio de Minas para nos prestegiar com sua palestra e sua participação no evento.</p>
<p>Um grade destaque também a palestra do Rafael Santos, que nos mostrou como construir uma plataforma RAD para Flex com CakePHP e Fake, apresentando inovações como o FAKE e integrações bem legais entre Flex e CAKEPHP, aonde se utiliza todos os recursos, desde validations, ate os models e controllers, nao deixando a desejar nem um pouco. </p>
<p>Parabéns aos Organizadores, ao Renan Gonçalves que se esforçou e fez acontecer e valer a pena o evento. Troca de conhecimentose fortalecimento da comunidade CAKEPHP e PHP no Brasil e em São Paulo.</p>
<p><strong>Minha Palestra:<br />
</strong></p>
<div style="width:425px;text-align:left" id="__ss_1599402"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/JoaoVagner/slide-cake-sp?type=powerpoint" title="Criando e Usando Helpers">Criando e Usando Helpers</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slidecakesp-090617150924-phpapp02&#038;rel=0&#038;stripped_title=slide-cake-sp" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slidecakesp-090617150924-phpapp02&#038;rel=0&#038;stripped_title=slide-cake-sp" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">PDF documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/JoaoVagner">JoaoVagner</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/06/17/encontro-de-desenvolvedores-cake-sao-paulo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conheça a função __autoload e esqueça que um dia precisou usar listas gigantes de includes</title>
		<link>http://technocil.com/2009/04/30/conheca-a-funcao-__autoload-e-esqueca-que-um-dia-precisou-listas-gigantes-de-includes/</link>
		<comments>http://technocil.com/2009/04/30/conheca-a-funcao-__autoload-e-esqueca-que-um-dia-precisou-listas-gigantes-de-includes/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 15:49:01 +0000</pubDate>
		<dc:creator>Tobias</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[autoload]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[__autoload]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=313</guid>
		<description><![CDATA[E ae gente, blz?
Bom o post de hoje é pequeno e rápido e com certeza incrívelmente útil, vou mostrar hoje uma técnica que estou usando pra facilitar minha vida na hora de desenvolver meus códigos, o assunto de hoje é o __autoload, uma funçãozinha que está me economizando preciosos minutos no desenvolvimento.
O funcionamento dele é [...]]]></description>
			<content:encoded><![CDATA[<p>E ae gente, blz?</p>
<p>Bom o post de hoje é pequeno e rápido e com certeza incrívelmente útil, vou mostrar hoje uma técnica que estou usando pra facilitar minha vida na hora de desenvolver meus códigos, o assunto de hoje é o <a href="http://br.php.net/__autoload"><em>__autoload</em></a>, uma funçãozinha que está me economizando preciosos minutos no desenvolvimento.</p>
<p>O funcionamento dele é básico, e funciona assim:</p>
<p>Quando você tenta instanciar uma classe o php verifica se essa classe já existe, se não existir ele tenta carregar ela de acordo com a função <em>__autoload</em> que estiver no script.</p>
<p>ex:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> __autoload<span style="color: #009900;">&#40;</span><span style="color: #000088;">$class_name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">require_once</span> <span style="color: #000088;">$class_name</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.php'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>digamos que em algum momento do meu código eu tentei instanciar a classe Groups</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$groups</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Groups<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>se a classe Groups não existir até o momento o php vai tentar incluir o arquivo Groups.php (de acordo com a minha função <em>__autoload</em>) antes de disparar um erro. Ta mas ele sempre vai procurar só pelo nome da classe? depende&#8230; tudo depende de como você faz a sua função <em>__autoload</em>, veja o exemplo abaixo para entender.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> __autoload<span style="color: #009900;">&#40;</span><span style="color: #000088;">$class_name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'my/path/to/classes/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$class_name</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.php'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>nesse exemplo acima o php vai procurar pela classe na path determinada na função antes de disparar o erro.</p>
<p>Bom é isso, só pra terminar vou dar uma dica que eu estou usando aqui, que é simplesmente adicionar as paths de onde as classes estão ao <em><a href="http://br.php.net/set_include_path">include_path</a></em>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #990000;">set_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">get_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> PATH_SEPARATOR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'./libs/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> __autoload<span style="color: #009900;">&#40;</span><span style="color: #000088;">$class_name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">require_once</span> <span style="color: #000088;">$class_name</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.php'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Vou explicar o código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">set_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">get_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> PATH_SEPARATOR <span style="color: #339933;">.</span> <span style="color: #0000ff;">'./libs/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Adiciona ao <em>include_path</em> do php a pasta ./libs/</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> __autoload<span style="color: #009900;">&#40;</span><span style="color: #000088;">$class_name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">require_once</span> <span style="color: #000088;">$class_name</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.php'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Define a função __autoload que irá procurar pelas classes quando forem instanciadas.</p>
<p>Ufa&#8230; cabou, é isso ai gente, como sempre dúvidas, sugestões e puxões de orelha nos comentários por favor :D.</p>
<p>abraço e até a próxima,<br />
ps. esse foi o post mais rápido que eu já postei, da idéia de postar até o fim da revisão do texto demorou 26 min oO.</p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/04/30/conheca-a-funcao-__autoload-e-esqueca-que-um-dia-precisou-listas-gigantes-de-includes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dica Rapida: Pegando Twittadas com PHP</title>
		<link>http://technocil.com/2009/04/24/dica-rapida-pegando-twittadas-com-php-2/</link>
		<comments>http://technocil.com/2009/04/24/dica-rapida-pegando-twittadas-com-php-2/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 14:25:42 +0000</pubDate>
		<dc:creator>João Vagner</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[simplexml]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://technocil.com/2009/04/24/dica-rapida-pegando-twittadas-com-php-2/</guid>
		<description><![CDATA[Ola a todos,
Vou começar uma série de posts rapidos com dicas legais e uteis pro dia-a-dia relacionadadas a PHP.
Quase todos usam Twitter, e ja sabemos o o Twitter tem uma API para integração, porem nao e necessario usar uma API para algo basico, como pegar os Ultimos posts de alguem via RSS. Ja que RSS [...]]]></description>
			<content:encoded><![CDATA[<p>Ola a todos,</p>
<p>Vou começar uma série de posts rapidos com dicas legais e uteis pro dia-a-dia relacionadadas a PHP.</p>
<p>Quase todos usam Twitter, e ja sabemos o o Twitter tem uma API para integração, porem nao e necessario usar uma API para algo basico, como pegar os Ultimos posts de alguem via RSS. Ja que RSS e um formato XML.</p>
<p>Abaixo um codigo simples e rapido:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$rss</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://twitter.com/statuses/user_timeline/14627317.rss'</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$abre</span> <span style="color: #339933;">=</span> <span style="color: #990000;">simplexml_load_file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rss</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">;</span> 
<span style="color: #000088;">$limite</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$abre</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">channel</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$itens</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$post</span> <span style="color: #339933;">=</span> <span style="color: #990000;">utf8_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$itens</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$post</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;hr /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">==</span><span style="color: #000088;">$limite</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$i</span><span style="color: #339933;">++;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p><strong>$rss</strong><br />
Indica o caminho completo do RSS a ser lido.</p>
<p><strong>$abre</strong><br />
Utiliza simplexml_load_file para ler o xml e converter em um objeto/p</p>
<p><strong>$i</strong><br />
Define o inicio do loop para que possamos frear o loop no nosso limite de twittadas./p</p>
<p><strong>$limite=3</strong><br />
Definimos um limite de posts, no caso como nosso loop comeca em em 0, definindo 3, o limite de posts seria 4: 0,1,2,3</p>
<p><strong>foreach ($abre&#8211;>channel->item as $itens ) {</strong><br />
Aqui criamos um loop do item do XML e o chamamos de $itens para melhor identificação dentro do loop.  Aqui ele herda os itens de channel->item, como title, e outros</p>
<p><strong>$post = utf8_decode($itens->title);</strong><br />
Aqui usamos o UTF-8 para decodificar as mensagens evitando erros de charset e podemos interpretar para o ISO. </p>
<p><strong>echo $post .&#8217; < hr / >&#8216;;</strong><br />
Aqui imprimos o Post na tela e adicionamos a tag<br />
<hr /> para separar os posts, criando uma linha de separação.</p>
<p><strong>if($i==$limite) { break; }</strong><br />
Aqui verificamos se o nosso loop chegou ao nosso limite definido acima, se chegar coloca um fim no loop do channel->item</p>
<p>Por fim e isso, basta usar em seus blogs, e onde mais desejar ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/04/24/dica-rapida-pegando-twittadas-com-php-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OOP no PHP: Overloading, utilizando os métodos mágicos do PHP</title>
		<link>http://technocil.com/2009/04/16/oop-no-php-overloading-utilizando-os-metodos-magicos-do-php/</link>
		<comments>http://technocil.com/2009/04/16/oop-no-php-overloading-utilizando-os-metodos-magicos-do-php/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 19:56:43 +0000</pubDate>
		<dc:creator>Tobias</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[call]]></category>
		<category><![CDATA[metodos magicos]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[__call]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=221</guid>
		<description><![CDATA[E aeeeeew blz? Bom gente voltando do período de preguiça bagarai, vício em jogos online e outras vagabundagens ociosidade vamos dar continuidade a série de artigos sobre OOP no PHP. O assunto de hoje é bem interessante, no post de hoje vamos ver como usar um dos métodos mágicos do php.
Neste artigo vou falar do [...]]]></description>
			<content:encoded><![CDATA[<p>E aeeeeew blz? Bom gente voltando do período de <strike>preguiça bagarai, vício em jogos online e outras vagabundagens</strike> ociosidade vamos dar continuidade a série de artigos sobre OOP no PHP. O assunto de hoje é bem interessante, no post de hoje vamos ver como usar um dos <a href="http://www.php.net/manual/en/language.oop5.magic.php">métodos mágicos do php</a>.</p>
<p>Neste artigo vou falar do método mágico <em>__call()</em>,  que funciona da seguinte maneira:</p>
<p>Quando uma classe tem o método<em> __call()</em> o php roda esse método sempre que <del datetime="2009-04-22T21:17:59+00:00">qualquer método da classe for chamado, mesmo se o método que foi chamado não existir</del> um método inexistente ou inacessível for chamado (obrigado <a href="http://www.manjaphp.com.br">Edgar</a> pelo puxão de orelha), isso abre espaço para algumas coisas interessantes.</p>
<p>Vamos a um exemplo do funcionamento de <em> __call()</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> ExemploCall <span style="color: #009900;">&#123;</span>  
  <span style="color: #000000; font-weight: bold;">function</span> __call<span style="color: #009900;">&#40;</span><span style="color: #000088;">$m</span><span style="color: #339933;">,</span> <span style="color: #000088;">$a</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Método chamado: <span style="color: #006699; font-weight: bold;">$m</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Parametros: <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">x</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$call</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ExemploCall<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$call</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">test</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Mostra na tela</span>
<span style="color: #666666; font-style: italic;">/*
Método chamado: test 
Parametros: 
array(3) { 
  [0]=&gt;  int(1) 
  [1]=&gt;  int(2) 
  [2]=&gt;  string(5) &quot;teste&quot; 
} 
*/</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>O exemplo acima simplesmente exibe na tela o método chamado e os parametros enviados, mas vendo isso a pergunta que surge na cabeça é, <strong>pra que ou onde eu vou usar o método <em>__call()</em>?</strong></p>
<p>A resposta pra essa pergunta vai da sua criatividade mas eu vou postar aqui uma forma de uso que o <a href="http://www.cakephp.org">cakephp</a> usava há algum tempo atrás.</p>
<p>Funcionava da seguinte forma, havia um método padrão chamado find que era chamado e fazia consultas ao banco de acordo com os parametros passados, porém, (aqui que vem a mágica) ele também podia ser chamado como findByNomeDoCampo o que em alguns momentos facilitava bastante a vida do programador, vamos fazer algo parecido com isso.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
  Só vou postar o código relevante aos métodos mágicos, mas supõe-se que
  deste ponto em diante você já tem incluido no arquivo toda a rotina de 
  conexão com o banco de dados, etc, etc, etc...  
**/</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Model <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
  <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//O conteúdo deste método vai variar de acordo com sua classe</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __call<span style="color: #009900;">&#40;</span><span style="color: #000088;">$method</span><span style="color: #339933;">,</span> <span style="color: #000088;">$params</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Verifica se o método chamado existe nessa classe</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">method_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span><span style="color: #000088;">$method</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">//Caso exista chama o método</span>
      <span style="color: #b1b100;">return</span> <span style="color: #990000;">call_user_method</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$method</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #000088;">$params</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> 
    <span style="color: #b1b100;">else</span> 
    <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">//Caso não exista, chama um método especial que fará a nossa mágica</span>
      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">parseMethods</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$method</span><span style="color: #339933;">,</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> parseMethods<span style="color: #009900;">&#40;</span><span style="color: #000088;">$method</span><span style="color: #339933;">,</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//Verifica se o método segue o padrão adotado</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">eregi</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'findBy'</span><span style="color: #339933;">,</span><span style="color: #000088;">$method</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span> <span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>      
      <span style="color: #666666; font-style: italic;">//Caso não siga dispara um erro dizendo que o método é inválido/não encontrado</span>
      <span style="color: #990000;">trigger_error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Método inválido ou inexistente'</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">E_USER_ERROR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
      <span style="color: #990000;">die</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">//Caso seja um método padronizado (findByAlgo) recupera o nome do campo e converte tudo para minúsculo</span>
      <span style="color: #000088;">$fieldName</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtolower</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">str_ireplace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'findBy'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><span style="color: #000088;">$method</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>      
&nbsp;
      <span style="color: #666666; font-style: italic;">//Formata os parametros para serem passados ao método find padrão</span>
      <span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'conditions'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fieldName</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'0'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #666666; font-style: italic;">//Chama o método find original</span>
      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>            
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> find<span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span> 
  <span style="color: #009900;">&#123;</span>    
    <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">//Aqui você faria a consulta usando as informações recebidas</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Instancia a classe</span>
<span style="color: #000088;">$model</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Model<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Define parametros a serem passados</span>
<span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
   <span style="color: #0000ff;">'fields'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'*'</span><span style="color: #009900;">&#41;</span>
  <span style="color: #339933;">,</span><span style="color: #0000ff;">'order'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'nome ASC'</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Chama o método mágico</span>
<span style="color: #666666; font-style: italic;">// Onde o primeiro parametro é o valor que o campo passado no nome do método deve ter.</span>
<span style="color: #000088;">$model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">findByBlog</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Technócio'</span><span style="color: #339933;">,</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
O que chega no método options é:
array(3) { 
    [&quot;fields&quot;] =&gt;  array(1) { 
        [0]=&gt;  string(1) &quot;*&quot; 
    } 
    [&quot;order&quot;] =&gt;  array(1) { 
        [0]=&gt;  string(8) &quot;nome ASC&quot; 
    } 
    [&quot;conditions&quot;] =&gt;  array(1) { 
        [&quot;blog&quot;]=&gt;  string(9) &quot;Technócio&quot; 
    } 
} 
**/</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>O código ta bem comentado e bem simples também, embora não tenha me aprofundado muito no assunto acho que deu pra ter uma noção dessa possibilidade e do que pode ser feito com isso.</p>
<p>Como sempre, para dúvidas, sugestões e puxões de orelha, utilizem os comentários. Até a próxima (que dessa vez não vai ser tão demorada assim).</p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/04/16/oop-no-php-overloading-utilizando-os-metodos-magicos-do-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Trabalhando com Datas em PHP &amp; MySQL</title>
		<link>http://technocil.com/2009/04/07/trabalhando-com-datas-em-php-mysql/</link>
		<comments>http://technocil.com/2009/04/07/trabalhando-com-datas-em-php-mysql/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 12:46:13 +0000</pubDate>
		<dc:creator>João Vagner</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[Destaques]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[datas]]></category>
		<category><![CDATA[pho]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=261</guid>
		<description><![CDATA[Bom dia,
Datas, hora, minutos, meses, anos, informações que nos deslocam às nossas tarefas diárias, ou que nos deixam desesperados porque o tempo é pouco para tal coisa ou compromisso, pois é, data esta dentro do tempo, que nem sempre esta à nosso favor. Deixa-mos a filosofia de lado, blá nunca fui bom filosófo, quer dizer, [...]]]></description>
			<content:encoded><![CDATA[<p>Bom dia,</p>
<p>Datas, hora, minutos, meses, anos, informações que nos deslocam às nossas tarefas diárias, ou que nos deixam desesperados porque o tempo é pouco para tal coisa ou compromisso, pois é, data esta dentro do tempo, que nem sempre esta à nosso favor. Deixa-mos a filosofia de lado, blá nunca fui bom filosófo, quer dizer, jamais fui um, então comecemos logo à entender um pouco datas.</p>
<h2>Formatos de datas no Mundão!</h2>
<p>O php, a linguagem de inicio que vou usar nesse post, tem a função <strong><a href="http://br2.php.net/manual/pt_BR/function.strftime.php">strftime()</a>, </strong>ela faz a formatação de uma hora/data com as configurações locais dos paises, é importante frisar que em servidores windows, é preciso usar a função <strong><a href="http://br2.php.net/manual/pt_BR/function.setlocale.php">setlocale()</a></strong> para definir a linguagem da localidade que você vai usar, e ler no <strong>MSDN</strong> as suportadas, porque claro, o <strong><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_country_strings.asp">Windows</a></strong> complica mais do que ajuda!</p>
<p><em>Exemplo de datas com fuso horario de outros paises</em></p>
<p><em>Alemanha</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//Seta o local, de_DE = alemanhã (German)</span>
<span style="color: #990000;">setlocale</span><span style="color: #009900;">&#40;</span>LC_TIME<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;deu&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #990000;">strftime</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; estamos na  German (Alemão) %A.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><em>Portugues Brasil</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//Seta o local, &quot;portuguese-brazil&quot; ou &quot;ptb&quot; = Português Brasil</span>
<span style="color: #990000;">setlocale</span><span style="color: #009900;">&#40;</span>LC_TIME<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;portuguese-brazil&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #990000;">strftime</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; estamos no Brasil  (Português) %A.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<h2>Formas de String:</h2>
<blockquote><p>%a &#8211; dia da semana abreviado de acordo com a localidade<br />
%A &#8211; nome da semana completo de acordo com a localidade</p></blockquote>
<p>Mais sobre as formas de string em <a href="http://br2.php.net/manual/pt_BR/function.strftime.php">PHP.Net</a> ( Manual).</p>
<p>Bom, agora que a parte de deixar configurado à data de acordo com sua localidade ou com a necessidade mesmo do desenvolvedor, por exemplo se você estiver trabalhando em um sistema que poderá ser usado em outros paìses (nossa, elevei o pessoal a programadores mundiais!), isso pode poupar-lhe de muita dor de cabeça, gritos, socos, murros, monitores, gabinetes, e HD&#8217;s!</p>
<h2>Datas em formato Timestamp</h2>
<blockquote><p>An extension of the DATE datatype that can store date and time data (including fractional seconds). The timestamp type takes 11 bytes of storage.</p></blockquote>
<p>Inglês péssimo né? é? então eu vou lhe dar uma linguada básicanisso e verbalizar essa budêga:</p>
<blockquote><p><cite>Uma extensão do datatype (tipo de data) da DATA que pode armazenar dados da data e da hora ( com segundos fracionários incluídos).  O tipo do timestamp faz exame de 11 bytes de  armazenamento..</cite></p></blockquote>
<p>Nossa, meu inglês é uma bosta também, mas o português tambem é fraco, mas é isso. é uma extenção de data para armazenamento de data hora e informações facionarias como segundos, blá e blá, se você quiser uma data exata mesmo, no real sentido, isso é sua solução!</p>
<h2>Timestamp em MySQL e outros tipos</h2>
<p>O Nosso Manual MySQL nos diz, que <strong><a href="http://dev.mysql.com/doc/refman/4.1/pt/datetime.html">DATETIMES</a></strong> e <strong><a href="http://dev.mysql.com/doc/refman/4.1/pt/datetime.html">TIMESTAMP</a></strong> são relacionadas, calma, elas não tem relações sexuais, vão ter datazinhas gritando, chorando e chamando você de titio não! nossa, mente poluída a minha não?! Elas são apenas parecidas, ou tem a mesma função, até hoje nunca descobri, ou tenho certeza disso! hahahaha!</p>
<p>Os formatos de DATE do MySQL se reservam apenas à Ano, dia e Mês: <em>YYYY-DD-MM</em>, não temos a opção de segundos fracionários, então neca de comparação exata usando segundos com esse tipo de campo.</p>
<p>Agora em Timestamp como diz a descrição da extenção, temos opção fracionária, que ficará no formato de: YYYY-DD-MM HH:MM:SS, po, mas ta feio pacas isso não? Os Brasileiros não leem datas nesse formato americano, então o MySQL permite usar o padrão de data Brasileiro ? que é DD-MM-YYYY, cara, sei não, se tiver desconheço, e não recomendo! já vou explicar os motivos.</p>
<p>Imagine essa  situação:</p>
<p>Você tem 2 datas, que precisam ser comparadas se uma é maior que outra , as datas são essas: <em>23/06/1989</em> e <em>23/08/1800</em>, e em comparações de datas você não pode usar barras, traços, essas viadagens todas pra ficar bonitinha! Seria assim seu pensamento:</p>
<p>23061989 > 23081800  vai retornar false, hahah se lasco cara!</p>
<p>Bom, olhando você ja sabe que a data mais antiga é maior que a mais nova, no nosso formato Brasileiro, mas isso esta errado, sendo que a primeira data é a maior, sendo à mais perto de nosso ano atual, não é? mas os numeros não mentem, porque nosso formato é incorreto para comparações de data, mas no formato americano é mais fácil de se comparar:</p>
<p>18002308 > 19892308 vai retornar true.</p>
<p>Mas você ficou tristinho, pois a data no formato americano fica estranho pros brasileiros, calma, tudo tem uma solução, você pode formatar a data em timestamp com uma função, ela fica em um formato agradavel de ler exemplo: <strong><em>23 de outubro de 2004 as 13:01:21</em></strong> . mas caso os dados venham do banco de dados, é necessário usar UNIX_TIMESTAMP antes no seu select, por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># Seleciona o campo data, usando a função UNIX_TIMESTAMP, dando renome a ela, de NovaData, campo esse da tabela TabelaLinda</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> UNIX_TIMESTAMP<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">DATA</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> NovaData <span style="color: #993333; font-weight: bold;">FROM</span> TabelaLinda;</pre></div></div>

<p>Se você chamar a função UNIX_TIMESTAMP sem nenhum argumento, exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># Obtem a data de hoje usando os segundos, desde de 1969!</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> UNIX_TIMESTAMP<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Isso iria retorna um tipo timestamp do Unix, são segundos desde &#8216;1969-01-01 00:00:00&#8242; GMT, mais ou menos assim: 882226357</p>
<p>Bom, ai você tem um monte de numeros de segundos, o que você vai fazer com eles? colocar no prato e comer? Jogar na lata do lixo porque não serve pra nada? Pegar uma metralhadora e atirar no monitor? Ou usa a função para formatar?, ahhh garoto esperto, usa a função!</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">function</span> montaData<span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #000088;">$v_mes</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;Janeiro&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Fevereiro&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Março&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Abril&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Maio&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Junho&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Julho&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Agosto&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Setembro&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Outubro&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Novembro&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Dezembro&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000088;">$v_data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">,</span><span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Y m d H i s&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">{$v_data[2]}</span> de {<span style="color: #006699; font-weight: bold;">$v_mes</span>[(int)<span style="color: #006699; font-weight: bold;">$v_data[1]</span>]} de <span style="color: #006699; font-weight: bold;">{$v_data[0]}</span> as <span style="color: #006699; font-weight: bold;">{$v_data[3]}</span>:<span style="color: #006699; font-weight: bold;">{$v_data[4]}</span>:<span style="color: #006699; font-weight: bold;">{$v_data[5]}</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Pronto! Basta aplicar:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">echo</span> montaData<span style="color: #009900;">&#40;</span><span style="color: #000088;">$consulta</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'NovaData'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// 23 de outubro de 2005, as 13:13:13</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Agora quando você define no seu campo tipo Timestamp? como deve inserir o formato das datas no banco? Você usa o padrão americano, temos outra função pra isso, pra em vez de se matar escrevendo date() e suas propriedades, só chama a função PadraoData().</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">function</span> padraoData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$exibe</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Y m d H i s'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$exibe</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Se você mandar imprimir date(&#8216;Y m d H i s&#8217;); vai ver que vai sair: YYYY MM DD H I S, não as letras, mas a data mesmo! que é o padrão americano, em timestamp! Em comparações isso fica mais perfeito ainda, não foge nem os segundinhos!</p>
<p>20041512030520  >  20031810122030 retorna  true<br />
&#8211;<br />
20031810122030 > 20041512030520   retorna  false</p>
<h2>Índices para Pesquisa</h2>
<ul> </p>
<li>Linguagem PHP  &#8211; <a href="http://www.php.net">http://www.php.net</a></li>
<li>Banco de dados Mysql &#8211; <a href="http://www.mysql.com">http://www.mysql.com</a></li>
</ul>
<p> </p>
<p>Abraços ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/04/07/trabalhando-com-datas-em-php-mysql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bloqueio de rota administrativa do CakePHP</title>
		<link>http://technocil.com/2009/03/12/bloqueio-de-rota-administrativa-do-cakephp/</link>
		<comments>http://technocil.com/2009/03/12/bloqueio-de-rota-administrativa-do-cakephp/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 23:34:56 +0000</pubDate>
		<dc:creator>João Vagner</dc:creator>
				<category><![CDATA[Destaques]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[Desenvolvimento web]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=210</guid>
		<description><![CDATA[Olá Pessoal,
Quem utiliza o Fremwork CakePHP sabe que é uma mão na roda o route admin. Nos poupa um bocado de trabalho criar as funções da administração do site. Isso graças ao &#8220;Bake&#8221; Porém a rota não pode ficar totalmente acessivel a qualquer um, certo? 
O Jonathan Snook  escreveu um artigo em relação a [...]]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal,</p>
<p>Quem utiliza o Fremwork CakePHP sabe que é uma mão na roda o route admin. Nos poupa um bocado de trabalho criar as funções da administração do site. Isso graças ao &#8220;Bake&#8221; Porém a rota não pode ficar totalmente acessivel a qualquer um, certo? </p>
<p>O <em>Jonathan Snook </em> escreveu um artigo em relação a isso, porém em alguns testes por aqui nenhum realmente funcionou utilizando .htaccess para proteção dessa rota com password.</p>
<p><a href="http://snook.ca/archives/servers/password_protect_admin/">Password Protecting Admin Functions in CakePHP</a>.</p>
<p>O Conceito da proteção no artigo do <em>Jonathan Snook </em> é simples, E pode ser gerado com qualquer um que possua acesso ao SSH do site. Não é necessário acesso root para esses tipos de ações no servidor.<br />
Seu servidor não te da acesso ao SSH? Está na hora de mudar para a <a href="http://www.iw2servers.com.br"><strong>IW²</strong></a></p>
<p>O primeiro passo dessa proteção se dá ao inserir seguinte conteúdo no seu <strong>.htaccess</strong> :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">AuthUserFile <span style="color: #339933;">/</span>diretorio<span style="color: #339933;">/</span>passwd<span style="color: #339933;">/</span>protecao
AuthName <span style="color: #0000ff;">&quot;Administracao CAKE&quot;</span>
AuthType Basic
<span style="color: #b1b100;">Require</span> valid<span style="color: #339933;">-</span>user</pre></td></tr></table></div>

<p>Com acesso ao ssh utilize o seguinte comando dentro da pasta &#8220;www&#8221;.</p>
<blockquote><p>htpasswd -c /diretorio/passwd/protecao username</p></blockquote>
<p>.<br />
Isso gera um arquivo com a senha criptografada! Caso queira barar o arquivo gerado para verificar fiquem à vontade!</p>
<p>Bons testes, aqui nunca funcionou!</p>
<h3>Meu jeitinho</h3>
<p>A maneira no qual eu utilizo é a verificação simples de variavel, ou seja, apenas um usuário dentro do código no qual após o POST, verifica os dados, e grava uma sessão, se os mesmos forem iguais.</p>
<p>Primeiro passo é abrir o seu <strong>/app/config/routes.php</strong>, e crie uma rota chamada <strong>admin</strong>, usando o controller de páginas estáticas. Veja:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">Router<span style="color: #339933;">::</span><span style="color: #004000;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/admin/'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'controller'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'pages'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'display'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Agora crie um arquivo chamado <strong>admin.ctp</strong> dentro da pasta /app/views/pages/ com um formulário básico para login e senha:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>  
<span style="color: #666666; font-style: italic;">//Define o layout padrão para a página</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">layout</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'admin'</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;h1&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Administração'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/h1&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>   
<span style="color: #666666; font-style: italic;">// Caso ocorra algum erro, é exibido em sua div correta!</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$error</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;div class='error'&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$error</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/div&gt;&quot;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
<span style="color: #000000; font-weight: bold;">?&gt;</span>   
<span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #666666; font-style: italic;">/*
criamos um formulário com o vetor User, indicando a rota /admin/login, onde teremos nossa verificação de usuário e senha para registro da sessão da administração, e acesso ao restante dos actions _admin_
*/</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'User'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'/admin/login/'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>   
&lt;fieldset&gt;
    &lt;legend&gt;Digite os dados&lt;/legend&gt;   
        <span style="color: #000000; font-weight: bold;">&lt;?php</span>  <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'username'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Login'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
        <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'password'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Senha'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'id'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Senha'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>   
  <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">end</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Logar!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>   
   &lt;/fieldset&gt;
&lt;/form&gt;</pre></td></tr></table></div>

<p>O próximo passo é criar uma nova rota no <strong> /app/config/routes.php</strong>, rota no qual foi definida na URL do nosso formulário, onde será submetida os dados para verificação.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">Router<span style="color: #339933;">::</span><span style="color: #004000;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/admin/login/'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'controller'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'users'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'admLogin'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Claro, obviamente eu já possuo um controller chamado users, caso não tenha, pode cria-lo, utilizando o código abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> UsersController <span style="color: #000000; font-weight: bold;">extends</span> AppController <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Users'</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$helpers</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Html'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Form'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
Claro, que aqui irão outras actions suas ;)
*/</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> admLogin<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
	    <span style="color: #666666; font-style: italic;">//verifica se o post possui alguma informação para registrar o nosso array com informações</span>
	    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
                <span style="color: #000088;">$dbuser</span>	<span style="color: #339933;">=</span>       <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'username'</span><span style="color: #339933;">==</span><span style="color: #0000ff;">'Administrador'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'password'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Sua_senha_aqui'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	           <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'User'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$dbuser</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> 
                         <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'User'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$dbuser</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>  <span style="color: #009900;">&#123;</span>   
                                 <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dbuser</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
                                 <span style="color: #666666; font-style: italic;">// registra a sessão &quot;admin&quot; para futuras verificações</span>
                                 <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFlash</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Logado com sucesso'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
                                 <span style="color: #666666; font-style: italic;">//Notifica o sucesso ao logar!</span>
                                 <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/admin/users/index'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
                                 <span style="color: #666666; font-style: italic;">// redireciona para a action index do controller users.</span>
	        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>   
	              <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFlash</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Erro! Dados inválidos'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                          <span style="color: #666666; font-style: italic;">// notifica o erro    </span>
	        <span style="color: #009900;">&#125;</span>   
	    <span style="color: #009900;">&#125;</span>   
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Note que por enquanto o nosso controller users possui apenas um action. Fica a seu critério a criação do resto do conteúdo ;) </p>
<p>Agora iremos criar a função para verificação da sessão:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #000000; font-weight: bold;">function</span> checkAdminSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
               <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">check</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
               <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFlash</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Você não tem acesso a essa área'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
               <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/admin/login/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#125;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>A minha recomendação é que coloque essa função dentro do arquivo <strong>/app/app_controller.php</strong> no qual o cake carrega automáticamente. Esse arquivo serve para colocar as funções que vai utilizar em todos os controllers, sem a necessidade de ficar repetindo os mesmos.</p>
<p>Agora vem a parte mais interessante, vamos inserir o beforeFilter(); também dentro do <strong>/app/app_controller.php</strong>, para verificação do parametro /admin/ na url, e execução da verificação da sessão. Veja:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> beforeFilter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
           <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">checkAdminSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#125;</span>   
 <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p><strong>O que a função faz é:</strong> Se existe algum parametro na url &#8220;admin&#8221;, executa a função checkAdminSession e veja se existe a sessão &#8220;admin&#8221;. Se não existir a sessão, a checkAdminSession redireciona para login. </p>
<p>Pronto, e assim você tem uma certa segurança em relação a rota /admin/ não estar sendo visualizada por tudo e por todos! </p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/03/12/bloqueio-de-rota-administrativa-do-cakephp/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
