<?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>CakePHP Brasil &#187; Tutoriais</title>
	<atom:link href="http://blog.cakephp-brasil.org/category/cakephp/tutoriais/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cakephp-brasil.org</link>
	<description>O blog público para desenvolvedores CakePHP.</description>
	<lastBuildDate>Tue, 06 Sep 2011 04:29:49 +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>Formatação no estilo brasileiro</title>
		<link>http://blog.cakephp-brasil.org/2009/04/22/formatacao-no-estilo-brasileiro/</link>
		<comments>http://blog.cakephp-brasil.org/2009/04/22/formatacao-no-estilo-brasileiro/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 23:41:31 +0000</pubDate>
		<dc:creator>Juan Basso</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[cakebr]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[formatacao]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[hora]]></category>
		<category><![CDATA[numero]]></category>

		<guid isPermaLink="false">http://blog.cakephp-brasil.org/?p=103</guid>
		<description><![CDATA[Cansado de chamar várias funções com diversos parâmetros para formatar os valores de data, número, etc nos padrões brasileiros? Então seu problemas acabaram!
Agora no plugin CakeBr há o helper chamado Formatacao para facilitar a formatação de datas e números. Os seguintes métodos podem ser utilizados:

data($data = null) Formata uma data timestamp no formato dd/mm/YYYY. Se [...]]]></description>
			<content:encoded><![CDATA[<p>Cansado de chamar várias funções com diversos parâmetros para formatar os valores de data, número, etc nos padrões brasileiros? Então seu problemas acabaram!</p>
<p>Agora no <a href="https://github.com/jrbasso/cake_ptbr/tree">plugin CakeBr</a> há o helper chamado Formatacao para facilitar a formatação de datas e números. Os seguintes métodos podem ser utilizados:</p>
<ul>
<li><strong>data($data = null)</strong> Formata uma data timestamp no formato dd/mm/YYYY. Se não for informada a data, será utilizada a data atual</li>
<li><strong>dataHora($dataHora = null, $segundos = true)</strong> Idem anterior, porém com a informação da hora junto.</li>
<li><strong>dataCompleta($dataHora = null)</strong> Mostra a data completa. Exemplo: &#8216;terça-feira, 21 de abril de 2009, 10:00:00&#8242;.</li>
<li><strong>precisao($numero, $casasDecimais = 3)</strong> Similar ao método precision do helper Time, mostrando os números no formato brasileiro.</li>
<li><strong>porcentagem($numero, $casasDecimais = 2)</strong> Mostra o valor em porcentos, similar ao toPorcentage do TimeHelper.</li>
<li><strong>moeda($valor, $opcoes = array())</strong> Mostra o valor em reais. Exemplo: R$ 10,20.</li>
<li><strong>moedaPorExtenso($numero)</strong> Escreve o valor por extenso, em reais.</li>
</ul>
<p>Caso alguém tenha mais algum método para incluir, basta informar ou criar um fork no projeto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cakephp-brasil.org/2009/04/22/formatacao-no-estilo-brasileiro/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Behavior com métodos dos Correios</title>
		<link>http://blog.cakephp-brasil.org/2009/04/21/behavior-com-metodos-dos-correios/</link>
		<comments>http://blog.cakephp-brasil.org/2009/04/21/behavior-com-metodos-dos-correios/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 22:35:20 +0000</pubDate>
		<dc:creator>Juan Basso</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[behavior]]></category>
		<category><![CDATA[correios]]></category>

		<guid isPermaLink="false">http://blog.cakephp-brasil.org/?p=98</guid>
		<description><![CDATA[Após criar o plugin para validações de itens brasileiros, duas funçõezinhas para verificar itens dos Correios.
O código está junto do projeto Cake PT-BR, no GitHub.
Similar ao Behavior de Validação, as funções dos Correios foram colocadas dentro de um Behavior. O nome dele é Correios (sugestivo   ). Nesse behavior há dois métodos:

valorFrete: calcula o [...]]]></description>
			<content:encoded><![CDATA[<p>Após criar o plugin para <a href="http://blog.cakephp-brasil.org/2009/04/18/validacoes-brasileiras/">validações de itens brasileiros</a>, duas funçõezinhas para verificar itens dos Correios.</p>
<p>O código está junto do projeto Cake PT-BR, no <a href="http://github.com/jrbasso/cake_ptbr/tree/master">GitHub</a>.</p>
<p>Similar ao Behavior de Validação, as funções dos Correios foram colocadas dentro de um Behavior. O nome dele é Correios (sugestivo <img src='http://blog.cakephp-brasil.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ). Nesse behavior há dois métodos:</p>
<ul>
<li><b>valorFrete:</b> calcula o valor do frete. Parâmetros:
<ul>
<li><b>servico:</b> define o tipo de serviço que será feito. Os valores válidos são através das constantes: CORREIOS_SEDEX, CORREIOS_SEDEX_A_COBRAR, CORREIOS_SEDEX_10, CORREIOS_SEDEX_HOJE, CORREIOS_E_SEDEX, CORREIOS_ENCOMENDA_NORMAL, CORREIOS_PAC.</li>
<li><b>cepOrigem:</b> Cep de origem no formato XXXXX-XXX.</li>
<li><b>cepDestino:</b> Cep de destino no formato XXXXX-XXX.</li>
<li><b>peso:</b> Peso, em quilos, do item a ser transportado. O valor deve ser um número e não deve ultrapassar 30.</li>
<li><b>maoPropria:</b>(opcional. Padrão falso) Valor boleano para indicar se o transporte é com mão prórpria.</li>
<li><b>valorDeclarado:</b> (opcional. Padrão 0.00) Valor do item a ser transportado.</li>
<li><b>avisoRecebimento:</b> (opcional. Padrão falso) Calculo com aviso de recebimento.</li>
</ul>
<p>		O retorno será negativo em caso de erro, que podem ser as constantes:</p>
<ul>
<li>ERRO_CORREIOS_PARAMETROS_INVALIDOS: Um ou mais parâmetros com formato ou conteúdo inválido.</li>
<li>ERRO_CORREIOS_EXCESSO_PESO: Peso acima do limite (30 Kg).</li>
<li>ERRO_CORREIOS_FALHA_COMUNICACAO: Problema de comunicação com o site dos Correios.</li>
<li>ERRO_CORREIOS_CONTEUDO_INVALIDO: O conteúdo retornado pelo Correios não é o esperado.</li>
</ul>
<p>		Em caso de sucesso, será retornado um array com os seguintes indices:</p>
<ul>
<li>ufOrigem: UF da Origem</li>
<li>ufDestino: UF do Destino</li>
<li>capitalOrigem: Valor booleano indicando se a origem é considerada capital</li>
<li>capitalDestino: Valor booleando indicando se o destino é considerado capital</li>
<li>valorMaoPropria: Valor, em reais, da mão própria</li>
<li>valorTarifaValorDeclarado: Valor da tarifa pelo valor declarado</li>
<li>valorFrete: Valor apenas do frente, sem incluir os valores de mão própria e tarifa do valor declarado</li>
<li>valorTotal: Soma de todos os valores anteriores</li>
</ul>
</li>
<li><b>endereco:</b> Informa o endereço baseado em algum CEP. O único parâmetro é o CEP no formato XXXXX-XXX. Os valores de retorno podem ser as constantes ERRO_CORREIOS_PARAMETROS_INVALIDOS, ERRO_CORREIOS_FALHA_COMUNICACAO ou ERRO_CORREIOS_CONTEUDO_INVALIDO em caso de erro. Em caso de sucesso, o retorno será um array com os indices logradouro, bairro, cidade e uf.</li>
</ul>
<p>Bem, agora vamos aos códigos. Um exemplo usando o behavior:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p98code2'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p982"><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" id="p98code2"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Correios <span style="color: #000000; font-weight: bold;">extends</span> AppModel <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Correios'</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$useTable</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$actsAs</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'CakeBr.Correios'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> frete<span style="color: #009900;">&#40;</span><span style="color: #000088;">$cepDestino</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Supondo que é uma loja que transporta produtos pequenos (até 1Kg)</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valorFrete</span><span style="color: #009900;">&#40;</span>CORREIOS_SEDEX<span style="color: #339933;">,</span> Configure<span style="color: #339933;">::</span><span style="color: #004000;">read</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Loja.CEP'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cepDestino</span><span style="color: #339933;">,</span> <span style="color:#800080;">1.0</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: #666666; font-style: italic;">// Outro caso</span>
<span style="color: #000000; font-weight: bold;">class</span> Endereco <span style="color: #000000; font-weight: bold;">extends</span> AppModel <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Endereco'</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$actsAs</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'CakeBr.Correios'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> beforeSave<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: #000088;">$endereco</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">endereco</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;">'Endereco'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'CEP'</span><span style="color: #009900;">&#93;</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: #000088;">$endereco</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</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;">'Endereco'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_merge</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;">'Endereco'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$endereco</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Aqui serão incluídas as informações de logradouro, bairro, cidade e uf.</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Qualquer dúvida, estamos aí.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cakephp-brasil.org/2009/04/21/behavior-com-metodos-dos-correios/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Validações brasileiras</title>
		<link>http://blog.cakephp-brasil.org/2009/04/18/validacoes-brasileiras/</link>
		<comments>http://blog.cakephp-brasil.org/2009/04/18/validacoes-brasileiras/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 14:55:05 +0000</pubDate>
		<dc:creator>Juan Basso</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[behavior]]></category>
		<category><![CDATA[cep]]></category>
		<category><![CDATA[cnpj]]></category>
		<category><![CDATA[cpf]]></category>
		<category><![CDATA[telefone]]></category>
		<category><![CDATA[validação]]></category>

		<guid isPermaLink="false">http://blog.cakephp-brasil.org/?p=94</guid>
		<description><![CDATA[No CakePHP temos diversas validações que servem para os EUA, porém nenhuma para os padrões brasileiros.  Pensando nisso, resolvi fazer um behavior para fazer este tipo de validação. Por enquanto ele só valida CPF, CNPJ, telefone e CEP.
O código está junto do projeto CakePTBR no GitHub. Eu coloquei ele na forma de plugin, então basta [...]]]></description>
			<content:encoded><![CDATA[<p>No CakePHP temos diversas validações que servem para os EUA, porém nenhuma para os padrões brasileiros.  Pensando nisso, resolvi fazer um behavior para fazer este tipo de validação. Por enquanto ele só valida CPF, CNPJ, telefone e CEP.</p>
<p>O código está junto do projeto <a href="http://github.com/jrbasso/cake_ptbr/tree/master" target="_blank">CakePTBR no GitHub</a>. Eu coloquei ele na forma de plugin, então basta copiar a pasta plugins para dentro do seu projeto (pasta app). Feito isto, ele já instalado e já pode ser usado nas models.</p>
<p>Nas models, deve ser incluído o behavior e usar a validação normalmente. Exemplo:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p94code6'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p946"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p94code6"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Usuario <span style="color: #000000; font-weight: bold;">extends</span> AppModel <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Usuario'</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$actsAs</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'CakeBr.Validacao'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Aqui inclui o behavior do plugin CakeBr</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$validates</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'cpf'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'rule'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'cpf'</span>
		<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Este exemplo mostra como validar o campo cpf. Mais detalhes de como funciona a validação, veja no <a href="http://book.cakephp.org/view/125/Data-Validation" target="_blank">CookBook</a>.</p>
<p>Bem, mas afinal, o que será validado?! Vamos detalhas um pouco mais cada uma das quatro funções de validação:</p>
<p><strong>CPF</strong></p>
<p>Se a regra for declarada apenas como cpf (idem exemplo acima), ele irá validar o CPF no formato XXX.XXX.XXX-XX e também fará o teste do dígito verificador (dois últimos números) para verificar se é um CPF válido.  Em determinadas situações, deseja-se enviar pro banco apenas os números, sem a formatação, pra isso, coloquei um parâmetro opcional que pode ser passado para fazer este teste. Na rule, deve ser colocado:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p94code7'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p947"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p94code7"><pre class="php" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$validates</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'cpf'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'rule'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cpf'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Deste modo ele irá validar apenas números.</p>
<p><strong>CNPJ</strong></p>
<p>Mesmo funcionamento do CPF, porém para CNPJ. A regra de apenas números também é válida. O formato do CPNJ é considerado XX.XXX.XXX/XXXX-XX.</p>
<p><strong>CEP</strong></p>
<p>O CEP, por padrão vai ser considerado nos formatos XXXXXXXX ou XXXXX-XXX. Caso queira alterar o separador, você pode definir da seguinte maneira:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p94code8'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p948"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p94code8"><pre class="php" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$validates</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'cep'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'rule'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cep'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'-'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>No exemplo acima, ele vai validar os valores padrões e XXXXX.XXX.</p>
<p><strong>Telefone</strong></p>
<p>A validação do telefone se dará através das formatações:</p>
<ul>
<li>XXXX-XXXX</li>
<li>(XX) XXXX-XXX (o espaço entre o fechamento de parênteses e o número é opcional, mas limitado a 1 espaço)</li>
<li>+XX (XX) XXXX-XXXX (idem anterior sobre o espaçamento)</li>
</ul>
<p>Caso deseje validar apenas números, passar o parâmetro true na validação. Neste caso, ele validará números com 8 ou 10 caracteres.</p>
<p>Bem, são estas as validações que fiz por enquanto. Caso alguém tenha uma sugestão de nova validação ou dúvida sobre as apresentadas, fique a vontade de comentar.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cakephp-brasil.org/2009/04/18/validacoes-brasileiras/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Trabalhando com JSON no CakePHP 1.2</title>
		<link>http://blog.cakephp-brasil.org/2008/09/11/trabalhando-com-json-no-cakephp-12/</link>
		<comments>http://blog.cakephp-brasil.org/2008/09/11/trabalhando-com-json-no-cakephp-12/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 01:13:44 +0000</pubDate>
		<dc:creator>Juan Basso</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://blog.cakephp-brasil.org/?p=52</guid>
		<description><![CDATA[Com o crescimento do uso de AJAX, da maioria dos frameworks de JavaScript (jQuery, Prototype, mooTools, YUI, ExtJS, &#8230;) e de uma dúvida no Groups do Google (Action que renderize apenas o layout, sem necessidade de uma view), resolvi escrever um post falando sobre como usar JSON no CakePHP de forma automática para retorno dos [...]]]></description>
			<content:encoded><![CDATA[<p>Com o crescimento do uso de AJAX, da maioria dos frameworks de JavaScript (jQuery, Prototype, mooTools, YUI, ExtJS, &#8230;) e de uma dúvida no Groups do Google (<a href="http://groups.google.com/group/cake-php-pt/browse_thread/thread/5052c43d26bfb477" target="_blank">Action que renderize apenas o layout, sem necessidade de uma view</a>), resolvi escrever um post falando sobre como usar JSON no CakePHP de forma automática para retorno dos dados, sem precisar gerar um arquivo de view para cada action e que não fere o MVC.<br />
<span style="font-weight: bold;">A Solução</span></p>
<p>Para solucionar o caso, achei que o melhor jeito seria criando uma classe de View nova. A classe View do CakePHP ela sempre procura um arquivo de view, além do template. Com a nova classe, seria feita a renderização ali mesmo, sem a necessidade de novos arquivos.</p>
<p>A classe que criei (JsonView) pode ser baixada <a href="http://blog.cakephp-brasil.org/wp-content/uploads/2008/09/json1.phps">aqui</a>. Ela deve ser colocada na pasta <span style="font-weight: bold;">views</span> de da sua aplicação (nenhuma sub-pasta) com o nome de <span style="font-weight: bold;">json.php</span>. Ou seja, no final, você terá o caminho <span style="font-weight: bold;">app/views/json.php</span>.<br />
<span style="font-weight: bold;">Como Usar</span></p>
<p>Para usar é bem simples. No seu controller, quando você for retornar um código em JSON, basta alterar a variável $view do controller para usar a nova classe. Além disso, os dados que você quer que retorne, devem ser setados com o nome &#8216;<span style="font-weight: bold;">json</span>&#8216; no seu controller. Caso não seja, ele vai renderizar normalmente. Exemplo de uso no controller:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p52code10'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p5210"><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
</pre></td><td class="code" id="p52code10"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> UsuariosController <span style="color: #000000; font-weight: bold;">extends</span> AppController <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$uses</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Usuario'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Grupo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #000088;">$json</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: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'usuarios'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Usuario</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'list'</span><span style="color: #009900;">&#41;</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: #000088;">$json</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;">view</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Json'</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'json'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'usuarios'</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;">function</span> multilista<span style="color: #009900;">&#40;</span><span style="color: #000088;">$json</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: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'usuarios'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Usuario</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'list'</span><span style="color: #009900;">&#41;</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;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'grupos'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Grupo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'list'</span><span style="color: #009900;">&#41;</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: #000088;">$json</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;">view</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Json'</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'json'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'usuarios'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'grupos'</span><span style="color: #009900;">&#41;</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: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Neste caso, quando o parâmetro de <span style="font-weight: bold;">index</span> não for true, ele vai renderizar como se fosse uma requisição normal. Caso passe como true, ele irá renderizar como JSON. Já no método <span style="font-weight: bold;">multilista</span>, além do parâmetro para verificar se é JSON, ele passa um array de variáveis para a view JSON, assim a classe irá renderizar mais de uma variável.</p>
<p>Outra maneira de se fazer é definir a variável $view da classe diretamente com &#8216;Json&#8217; (assim como foi feito com $uses no exemplo). Assim, sempre que você der um set na variável &#8216;json&#8217;, a classe da View se liga e renderiza em json, caso contrário mantém o normal.</p>
<p><span style="font-weight: bold;">Conclusão</span></p>
<p>Este é um método fácil e rápido de renderizar as requisições JSON, sem precisar criar um arquivo para cada requisição e sem precisar de muito código (tanto no controller, quanto na view).</p>
<p>O código que fiz, é compatível com PHP 4 e 5, então é possível usar com o CakePHP sem medo em qualquer versão de PHP.</p>
<p>Abraços e bom uso. <img src='http://blog.cakephp-brasil.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Dicas são sempre bem vindas.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cakephp-brasil.org/2008/09/11/trabalhando-com-json-no-cakephp-12/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Usando FlexiGrid com CakePHP</title>
		<link>http://blog.cakephp-brasil.org/2008/07/30/usando-flexigrid-com-cakephp/</link>
		<comments>http://blog.cakephp-brasil.org/2008/07/30/usando-flexigrid-com-cakephp/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 03:05:14 +0000</pubDate>
		<dc:creator>Juan Basso</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[ext]]></category>
		<category><![CDATA[flexigrid]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[lista]]></category>
		<category><![CDATA[sort]]></category>
		<category><![CDATA[tabela]]></category>

		<guid isPermaLink="false">http://blog.cakephp-brasil.org/?p=32</guid>
		<description><![CDATA[Pessoal,
Depois de escrever sobre como usar o TableSorter com CakePHP, vou escrever agora sobre o FlexiGrid. Mostrar como implementar o exemplo mais sofisticado que eles apresentam no site deles.
Primeiramente, vamos baixar os arquivos necessários:
jQuery: http://jquery.com (mais recente no momento é a 1.2.6)
FlexiGrid: http://www.webplicity.net/flexigrid/ (estou me baseando na versão 1.0b3)
Colocar os arquivos (jquery.js e flexigrid.js) na [...]]]></description>
			<content:encoded><![CDATA[<p>Pessoal,</p>
<p>Depois de escrever sobre <a href="http://blog.cakephp-brasil.org/2008/07/28/usando-o-tablesorter-com-cakephp/">como usar o TableSorter com CakePHP</a>, vou escrever agora sobre o FlexiGrid. Mostrar como implementar o exemplo mais sofisticado que eles apresentam no site deles.</p>
<p>Primeiramente, vamos baixar os arquivos necessários:</p>
<li>jQuery: <a href="http://jquery.com">http://jquery.com</a> (mais recente no momento é a 1.2.6)</li>
<li>FlexiGrid: <a href="http://www.webplicity.net/flexigrid/">http://www.webplicity.net/flexigrid/</a> (estou me baseando na versão 1.0b3)</li>
<p>Colocar os arquivos (jquery.js e flexigrid.js) na pasta vendors\js ou webroot\js, conforme sua preferência.</p>
<p><strong>Agora na view que vai mostrar a tabela:</strong></p>
<p>Carregar os javascripts:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p32code15'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3215"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p32code15"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$javascript</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jquery'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'flexigrid'</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: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Feito isso, incluir o seguinte código na página para exibir a tabela (PS: esse código eu copiei exatamente como está na página do Flexigrid):</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p32code16'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3216"><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
</pre></td><td class="code" id="p32code16"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>style<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">.</span>flexigrid div<span style="color: #339933;">.</span>fbutton <span style="color: #339933;">.</span>add <span style="color: #009900;">&#123;</span>
		background<span style="color: #339933;">:</span> url<span style="color: #009900;">&#40;</span>css<span style="color: #339933;">/</span>images<span style="color: #339933;">/</span>add<span style="color: #339933;">.</span>png<span style="color: #009900;">&#41;</span> no<span style="color: #339933;">-</span>repeat center left<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>	
&nbsp;
	<span style="color: #339933;">.</span>flexigrid div<span style="color: #339933;">.</span>fbutton <span style="color: #339933;">.</span>delete <span style="color: #009900;">&#123;</span>
		background<span style="color: #339933;">:</span> url<span style="color: #009900;">&#40;</span>css<span style="color: #339933;">/</span>images<span style="color: #339933;">/</span>close<span style="color: #339933;">.</span>png<span style="color: #009900;">&#41;</span> no<span style="color: #339933;">-</span>repeat center left<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>	
<span style="color: #339933;">&lt;/</span>style<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>table id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;flex1&quot;</span> style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;display:none&quot;</span><span style="color: #339933;">&gt;&lt;/</span>table<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;#flex1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>flexigrid<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
		url<span style="color: #339933;">:</span> <span style="color: #0000ff;">'&lt;?php echo Router::url(array('</span>controller<span style="color: #0000ff;">' =&gt; '</span>flexi<span style="color: #0000ff;">', '</span>action<span style="color: #0000ff;">' =&gt; '</span>index<span style="color: #0000ff;">'), true); ?&gt;'</span><span style="color: #339933;">,</span>
		dataType<span style="color: #339933;">:</span> <span style="color: #0000ff;">'json'</span><span style="color: #339933;">,</span>
		colModel <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
			<span style="color: #009900;">&#123;</span>display<span style="color: #339933;">:</span> <span style="color: #0000ff;">'ISO'</span><span style="color: #339933;">,</span> name <span style="color: #339933;">:</span> <span style="color: #0000ff;">'iso'</span><span style="color: #339933;">,</span> width <span style="color: #339933;">:</span> <span style="color: #cc66cc;">40</span><span style="color: #339933;">,</span> sortable <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> align<span style="color: #339933;">:</span> <span style="color: #0000ff;">'center'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			<span style="color: #009900;">&#123;</span>display<span style="color: #339933;">:</span> <span style="color: #0000ff;">'Name'</span><span style="color: #339933;">,</span> name <span style="color: #339933;">:</span> <span style="color: #0000ff;">'name'</span><span style="color: #339933;">,</span> width <span style="color: #339933;">:</span> <span style="color: #cc66cc;">180</span><span style="color: #339933;">,</span> sortable <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> align<span style="color: #339933;">:</span> <span style="color: #0000ff;">'left'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			<span style="color: #009900;">&#123;</span>display<span style="color: #339933;">:</span> <span style="color: #0000ff;">'Printable Name'</span><span style="color: #339933;">,</span> name <span style="color: #339933;">:</span> <span style="color: #0000ff;">'printable_name'</span><span style="color: #339933;">,</span> width <span style="color: #339933;">:</span> <span style="color: #cc66cc;">120</span><span style="color: #339933;">,</span> sortable <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> align<span style="color: #339933;">:</span> <span style="color: #0000ff;">'left'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			<span style="color: #009900;">&#123;</span>display<span style="color: #339933;">:</span> <span style="color: #0000ff;">'ISO3'</span><span style="color: #339933;">,</span> name <span style="color: #339933;">:</span> <span style="color: #0000ff;">'iso3'</span><span style="color: #339933;">,</span> width <span style="color: #339933;">:</span> <span style="color: #cc66cc;">130</span><span style="color: #339933;">,</span> sortable <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> align<span style="color: #339933;">:</span> <span style="color: #0000ff;">'left'</span><span style="color: #339933;">,</span> hide<span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			<span style="color: #009900;">&#123;</span>display<span style="color: #339933;">:</span> <span style="color: #0000ff;">'Number Code'</span><span style="color: #339933;">,</span> name <span style="color: #339933;">:</span> <span style="color: #0000ff;">'numcode'</span><span style="color: #339933;">,</span> width <span style="color: #339933;">:</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">,</span> sortable <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> align<span style="color: #339933;">:</span> <span style="color: #0000ff;">'right'</span><span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
		buttons <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
			<span style="color: #009900;">&#123;</span>name<span style="color: #339933;">:</span> <span style="color: #0000ff;">'Add'</span><span style="color: #339933;">,</span> bclass<span style="color: #339933;">:</span> <span style="color: #0000ff;">'add'</span><span style="color: #339933;">,</span> onpress <span style="color: #339933;">:</span> test<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			<span style="color: #009900;">&#123;</span>name<span style="color: #339933;">:</span> <span style="color: #0000ff;">'Delete'</span><span style="color: #339933;">,</span> bclass<span style="color: #339933;">:</span> <span style="color: #0000ff;">'delete'</span><span style="color: #339933;">,</span> onpress <span style="color: #339933;">:</span> test<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			<span style="color: #009900;">&#123;</span>separator<span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
		searchitems <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
			<span style="color: #009900;">&#123;</span>display<span style="color: #339933;">:</span> <span style="color: #0000ff;">'ISO'</span><span style="color: #339933;">,</span> name <span style="color: #339933;">:</span> <span style="color: #0000ff;">'iso'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			<span style="color: #009900;">&#123;</span>display<span style="color: #339933;">:</span> <span style="color: #0000ff;">'Name'</span><span style="color: #339933;">,</span> name <span style="color: #339933;">:</span> <span style="color: #0000ff;">'name'</span><span style="color: #339933;">,</span> isdefault<span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
		sortname<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;iso&quot;</span><span style="color: #339933;">,</span>
		sortorder<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;asc&quot;</span><span style="color: #339933;">,</span>
		usepager<span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
		title<span style="color: #339933;">:</span> <span style="color: #0000ff;">'Paises'</span><span style="color: #339933;">,</span>
		useRp<span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
		rp<span style="color: #339933;">:</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">,</span>
		showTableToggleBtn<span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
		width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">700</span><span style="color: #339933;">,</span>
		height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span><span style="color: #339933;">,</span>
		pagestat<span style="color: #339933;">:</span> <span style="color: #0000ff;">'Mostrando {from} até {to} de {total} itens'</span><span style="color: #339933;">,</span>
		procmsg<span style="color: #339933;">:</span> <span style="color: #0000ff;">'Processando, aguarde...'</span><span style="color: #339933;">,</span>
		nomsg<span style="color: #339933;">:</span> <span style="color: #0000ff;">'Nenhum item'</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> test<span style="color: #009900;">&#40;</span>com<span style="color: #339933;">,</span>grid<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>com <span style="color: #339933;">==</span> <span style="color: #0000ff;">'Delete'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			confirm<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Excluir '</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.trSelected'</span><span style="color: #339933;">,</span>grid<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>length <span style="color: #339933;">+</span> <span style="color: #0000ff;">' itens?'</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>com <span style="color: #339933;">==</span> <span style="color: #0000ff;">'Add'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			alert<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Adicionar novo item'</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;">&lt;/script&gt;</span></pre></td></tr></table></div>

<p>Pronto, nossa view está pronta para exibir os dados. <strong>Agora vamos para a parte dos dados:</strong></p>
<p>Vamos começar pelo controller (controllers/flexi_controller.php):</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p32code17'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3217"><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
</pre></td><td class="code" id="p32code17"><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> FlexiController <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;">'Flexi'</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$uses</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Country'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		Configure<span style="color: #339933;">::</span><span style="color: #004000;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'debug'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">extract</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;">'form'</span><span style="color: #009900;">&#93;</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;">paginate</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'limit'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$rp</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">'page'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$page</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: #000088;">$sortname</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$sortorder</span>
			<span style="color: #009900;">&#41;</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: #000088;">$query</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;">paginate</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'conditions'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$qtype</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' LIKE'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'%'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$query</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'%'</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-type: text/x-json'</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;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'paises'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Country'</span><span style="color: #009900;">&#41;</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;">layout</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'ajax'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Duas considerações: desativar o debug é para que ele não exiba erros/warnings de PHP e o tempo de carregamento no final. O layout ajax é para ele não incluir nada a mais que o que eu colocar na view.</p>
<p>Bem, feito isso no controller, vamos para a view (views/flexi/index.ctp), montar nosso JSON na mão&#8230; <img src='http://blog.cakephp-brasil.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p32code18'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3218"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p32code18"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$params</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #009900;">&#123;</span> page<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'page'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">,</span> total<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'count'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">,</span> rows<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$registros</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$paises</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$pais</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$registros</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;{id: '&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$pais</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Country'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'iso'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;', cell: ['&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$pais</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Country'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'iso'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;', '&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$pais</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Country'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;', '&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$pais</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Country'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'printable_name'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;', '&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$pais</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Country'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'iso3'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;', '&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$pais</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Country'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'numcode'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;']}&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">','</span><span style="color: #339933;">,</span> <span style="color: #000088;">$registros</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span> <span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Pronto, isso aí vai gerar o JSON necessário para o Flexigrid. Já dá para brincar com ordenação, troca de páginas, filtro&#8230;</p>
<p>Qualquer coisa, só comentar!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cakephp-brasil.org/2008/07/30/usando-flexigrid-com-cakephp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Usando o TableSorter com CakePHP</title>
		<link>http://blog.cakephp-brasil.org/2008/07/28/usando-o-tablesorter-com-cakephp/</link>
		<comments>http://blog.cakephp-brasil.org/2008/07/28/usando-o-tablesorter-com-cakephp/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 00:26:40 +0000</pubDate>
		<dc:creator>Juan Basso</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[ordernar]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[sorter]]></category>
		<category><![CDATA[tabela]]></category>
		<category><![CDATA[table]]></category>
		<category><![CDATA[tablesorter]]></category>
		<category><![CDATA[vendor]]></category>

		<guid isPermaLink="false">http://blog.cakephp-brasil.org/?p=28</guid>
		<description><![CDATA[Pessoal, depois de um tempo sumido devido a alguns trabalhos que me consumiram muito tempo, estou voltando&#8230;
Hoje vou falar de uma experiência que tive com o TableSorter com CakePHP na construção de uma página, não me atendo muito a detalhes de design, mas da parte funcional. No grupos de CakePHP PT eu tinha falado que [...]]]></description>
			<content:encoded><![CDATA[<p>Pessoal, depois de um tempo sumido devido a alguns trabalhos que me consumiram muito tempo, estou voltando&#8230;</p>
<p>Hoje vou falar de uma experiência que tive com o TableSorter com CakePHP na construção de uma página, não me atendo muito a detalhes de design, mas da parte funcional. No grupos de CakePHP PT eu tinha falado que ia fazer, mas fazem quase dois meses e nada, porém agora lá vai&#8230; Bill: desculpe a demora. <img src='http://blog.cakephp-brasil.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Primeiro, baixem o jQuery (<a href="http://jquery.com">http://jquery.com</a>) e o plugin TableSorter (<a href="http://tablesorter.com">http://tablesorter.com</a>).</p>
<p>Extraia os arquivos baixados (jquery.js e jquery.tablesorter.js) em alguma vendors\js ou webroot\js. Eu particularmente prefiro deixar na pasta vendors, pois são plugins de terceiros ou que não são exclusivos da aplicação. Em contra partida, deixar na pasta webroot polpa o trabalho do servidor executar o cake para procurar, reduzindo o tempo de resposta. Aí vai do gosto de cada um. Eu prefiro perder tempo para deixar as coisas nos seus devidos lugares&#8230;</p>
<p>No controller, você precisa apenas declarar que vai usar o helper Javascript:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p28code23'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2823"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p28code23"><pre class="php" style="font-family:monospace;"><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: #339933;">...,</span> <span style="color: #0000ff;">'Javascript'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Feito isso, criamos uma tabela na view do que queremos mostar:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p28code24'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2824"><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
</pre></td><td class="code" id="p28code24"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>table border<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;0&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;detalhe_compra&quot;</span><span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>caption<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Detalhe por compra'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>caption<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>thead<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>th<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Pedido'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>th<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Data'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>th<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Cliente'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>th<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Valor'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;/</span>thead<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>tfoot<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>td colspan<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;3&quot;</span><span style="color: #339933;">&gt;&amp;</span>nbsp<span style="color: #339933;">;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$number</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">currency</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$totalPedidos</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;/</span>tfoot<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>tbody<span style="color: #339933;">&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$pedidos</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$pedido</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$pedido</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Pedido'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'numero'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$pedido</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Pedido'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'data'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$pedido</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Cliente'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nome'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$pedido</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Pedido'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'valor'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>td<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	<span style="color: #339933;">&lt;/</span>tbody<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Depois, ainda na mesma view, basta colocar o seguinte código para carregar os arquivos de javascript no head:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p28code25'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2825"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p28code25"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$javascript</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jquery'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'jquery.tablesorter'</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: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Em seguida, configurar o TableSorter para agir sobre a tabela:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p28code26'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2826"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p28code26"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$javascript</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">codeBlock</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'
	$(document).ready(function(){
		$(&quot;#detalhe_compra&quot;).tablesorter({decimal: &quot;,&quot;, dateFormat: &quot;uk&quot;});
	});'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'inline'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</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></pre></td></tr></table></div>

<p>Nas configurações da tabela, defini que os números possuem o vírgula como separador decimal e a data no formato inglês (similar ao nosso).</p>
<p>Pronto, só isso já faz funcionar o TableSorter. Outras configurações, podem olhar no site do TableSorter e ver. Lá é bem documentado e tranquilo.</p>
<p>Abraços e boa sorte a todos, qualquer coisa, é só comentar.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cakephp-brasil.org/2008/07/28/usando-o-tablesorter-com-cakephp/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Instalação recomendada (mais segura)</title>
		<link>http://blog.cakephp-brasil.org/2008/05/24/instalacao-recomendada-mais-segura/</link>
		<comments>http://blog.cakephp-brasil.org/2008/05/24/instalacao-recomendada-mais-segura/#comments</comments>
		<pubDate>Sat, 24 May 2008 18:01:51 +0000</pubDate>
		<dc:creator>Juan Basso</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[servidor]]></category>

		<guid isPermaLink="false">http://blog.cakephp-brasil.org/?p=18</guid>
		<description><![CDATA[Quando vamos instalar nossas aplicações em um servidor, temos o costume de pegar todo o conteúdo e jogar dentro de uma pasta ou direto na raiz do servidor de web. Digitamos o endereço e lá está nossa aplicação rodado no servidor! Uau! Porém, não é bem assim que devemos fazer. Em ambiente de desenvolvimento até [...]]]></description>
			<content:encoded><![CDATA[<p>Quando vamos instalar nossas aplicações em um servidor, temos o costume de pegar todo o conteúdo e jogar dentro de uma pasta ou direto na raiz do servidor de web. Digitamos o endereço e lá está nossa aplicação rodado no servidor! Uau! Porém, não é bem assim que devemos fazer. Em ambiente de desenvolvimento até podemos fazer, pois não temos nada tão seguro assim e é mais fácil para nós trabalharmos, mas para ambiente de produção recomenda-se fazer de outra maneira.</p>
<p>Colocar os diretórios app (ou o nome que você deu), cake e vendors dentro de um local não visível ao público (na maioria dos servidores de hospedagem, é a pasta fora de public_html ou www). Feito isso, mover o conteúdo da pasta app\webroot para o local público que você deseja que apareça. Por exemplo, se você quiser http://site/minhaapp/, coloque os arquivos da webroot (.htaccess, index.php, pastas img, js, css, &#8230;) dentro de public_html/minhaapp/.</p>
<p>Após feito isso, abrir o arquivo index.php para configurar o local que a pasta da sua aplicação está e onde está o cake também. Vamos supor que coloquei minha pasta app e cake dentro da pasta &#8217;site&#8217;, sem visibilidade ao público (no mesmo nível de public_html) e que coloquei os arquivos de webroot na raiz do meu domínio (direto em public_html ou www), ficando da seguinte estrutura:</p>
<pre>
/
	site/
		app/
		cake/
	public_html/
</pre>
<p>No lugar de:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p18code31'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1831"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p18code31"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ROOT'</span><span style="color: #339933;">,</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Vamos substituir por:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p18code32'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1832"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p18code32"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ROOT'</span><span style="color: #339933;">,</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> DS <span style="color: #339933;">.</span> <span style="color: #0000ff;">'site'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Com isso, ele informa que os diretórios de cake e app estão a um nível inferior e dentro de site.</p>
<p>Depois, substituir:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p18code33'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1833"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p18code33"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'APP_DIR'</span><span style="color: #339933;">,</span> <span style="color: #990000;">basename</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Por:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p18code34'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1834"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p18code34"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'APP_DIR'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'app'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Assim informamos o nome da nossa pasta app. Ele irá procurar dentro de ROOT . APP_DIR.</p>
<p>Pronto! Alteramos o diretório dos nossos arquivos e não há perigo deles serem vistos pelo público. Assim se o Apache deixar de reconhecer os arquivos .php, o máximo que as pessoas verão é o index.php que não trás muita informação e ninguém rouba suas regras de negócio, login de banco de dados, etc.</p>
<p>Isto também está documentado no manual:</p>
<ul>
<li><a href="http://book.cakephp.org/view/35/advanced-installation">Em inglês</a> &#8211; Versão oficial</li>
<li><a href="http://book.cakephp.org/pt/view/35/instala-o-avan-ada">Em português</a> &#8211; No site oficial (traduzido por mim)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.cakephp-brasil.org/2008/05/24/instalacao-recomendada-mais-segura/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Usando jQuery com CakePHP</title>
		<link>http://blog.cakephp-brasil.org/2008/05/19/usando-jquery-com-cakephp/</link>
		<comments>http://blog.cakephp-brasil.org/2008/05/19/usando-jquery-com-cakephp/#comments</comments>
		<pubDate>Mon, 19 May 2008 23:59:03 +0000</pubDate>
		<dc:creator>Juan Basso</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://blog.cakephp-brasil.org/?p=13</guid>
		<description><![CDATA[Vendo o questionamento de muitas pessoas no Google Groups, vou explicar como usar o jQuery juntamente com o CakePHP.
A primeira coisa que você tem que fazer é baixar o código do jQuery e colocá-lo na pasta vendors\js (tanto faz ser na vendors dentro de app ou fora). Depois disso, nos controllers que você for utilizar o [...]]]></description>
			<content:encoded><![CDATA[<p>Vendo o questionamento de muitas pessoas no <a title="Google Groups" href="http://groups.google.com/group/cake-php-pt" target="_blank">Google Groups</a>, vou explicar como usar o <a title="jQuery" href="http://jquery.com" target="_blank">jQuery</a> juntamente com o CakePHP.</p>
<p>A primeira coisa que você tem que fazer é baixar o código do jQuery e colocá-lo na pasta vendors\js (tanto faz ser na vendors dentro de app ou fora). Depois disso, nos controllers que você for utilizar o jQuery, inclua o helper Javascript:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p13code37'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1337"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p13code37"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> SeuController <span style="color: #000000; font-weight: bold;">extends</span> AppController <span style="color: #009900;">&#123;</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;">'Javascript'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Se você usa em todas as páginas, pode colocar isto no seu AppController.</p>
<p>Feito isso, você pode usar na sua view (ou layout) o seguinte código:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p13code38'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1338"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="p13code38"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">// Incluir o jQuery ao projeto</span>
<span style="color: #666666; font-style: italic;">// Neste exemplo estou importando a jquery.tablesorter também</span>
<span style="color: #666666; font-style: italic;">// O segundo parâmetro (false) é para indicar que vai no &lt;head&gt; e não no local onde está sendo executado</span>
<span style="color: #000088;">$javascript</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jquery'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'jquery.tablesorter'</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: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Aqui vou definir alguns comandos de jQuery</span>
<span style="color: #000088;">$javascript</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">codeBlock</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'
  $(document).ready(function(){
    $(&quot;#detalhe_compra&quot;).tablesorter({decimal: &quot;,&quot;, dateFormat: &quot;uk&quot;});
    $(&quot;#resumo_compras&quot;).tablesorter({decimal: &quot;,&quot;, dateFormat: &quot;uk&quot;});
  });'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'inline'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</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>
Minha view normalmente<span style="color: #339933;">...</span></pre></td></tr></table></div>

<p>Com isso, você faz que o código javascript vá para o &lt;head&gt; do seu HTML e não fique no meio das suas views, o que é deselegante e fora do padrão W3C.</p>
<p>Num próximo post explico como usar jQuery e AJAX.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cakephp-brasil.org/2008/05/19/usando-jquery-com-cakephp/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

