<?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>Renan Lima &#187; CakePHP</title>
	<atom:link href="http://www.renanlima.com/blog/category/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.renanlima.com/blog</link>
	<description>Um pouco do que gosto, faço e crio</description>
	<lastBuildDate>Fri, 30 Apr 2010 14:41:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>CakePHP &#8211; Use o containable e seja feliz</title>
		<link>http://www.renanlima.com/blog/cakephp-use-o-containable-e-seja-feliz/</link>
		<comments>http://www.renanlima.com/blog/cakephp-use-o-containable-e-seja-feliz/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 12:50:58 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[containable cakephp]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=1176</guid>
		<description><![CDATA[Conversando com um amigo do trabalho(@lindenberg), recebi uma dica que talvez você que já trabalha com CakePHP até saiba, mas eu não sabia. Para consultar dados no banco e usar condições eu fazia assim: $options = array(&#8216;conditions&#8217;=&#62;array(&#8216;Alunos.semestre&#8217;=&#62;&#8217;2010.1&#8242;),&#8217;limit&#8217;=&#62;50); $findALunos = $this-&#62;Alunos-&#62;find(&#8216;all&#8217;,$options); Na versão 1.2 do cake foi adicionado o Containable, é bem mais simples do que [...]]]></description>
			<content:encoded><![CDATA[<p>Conversando com um amigo do trabalho(@lindenberg), recebi uma dica que talvez você que já trabalha com CakePHP até saiba, mas eu não sabia.</p>
<p>Para consultar dados no banco e usar condições eu fazia assim:</p>
<p style="padding-left: 30px;"><span style="color: #333333;">$options = array(&#8216;conditions&#8217;=&gt;array(&#8216;Alunos.semestre&#8217;=&gt;&#8217;2010.1&#8242;),&#8217;limit&#8217;=&gt;50);<br />
$findALunos = $this-&gt;Alunos-&gt;find(&#8216;all&#8217;,$options);</span></p>
<p>Na versão 1.2 do cake foi adicionado o Containable, é bem mais simples do que o usado anteriormente.</p>
<p>Portanto, use o containable e não como codificado acima.</p>
<p>Consulte na documentação: <a href="http://book.cakephp.org/view/474/Containable">http://book.cakephp.org/view/474/Containable</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/cakephp-use-o-containable-e-seja-feliz/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Desativando validação no controller</title>
		<link>http://www.renanlima.com/blog/desativando-validacao-no-controller/</link>
		<comments>http://www.renanlima.com/blog/desativando-validacao-no-controller/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 10:58:36 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=1125</guid>
		<description><![CDATA[Imagine que você tenha uma validação em seu modelo e deseja desativar a validação em determinado controle que esteja usando este modelo. Para desativar é muito simples, veja na instução abaixo: $this-&#62;Modelo-&#62;validate = array&#40;&#41;;]]></description>
			<content:encoded><![CDATA[<p>Imagine que você tenha uma validação em seu modelo e deseja desativar a validação em determinado controle que esteja usando este modelo. Para desativar é muito simples, veja na instução abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Modelo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">validate</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></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/desativando-validacao-no-controller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cakephp &#8211; Trabalhando Upload com a classe Verot</title>
		<link>http://www.renanlima.com/blog/cakephp-trabalhando-upload-com-a-classe-verot/</link>
		<comments>http://www.renanlima.com/blog/cakephp-trabalhando-upload-com-a-classe-verot/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 15:45:48 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[class verot]]></category>
		<category><![CDATA[component upload]]></category>
		<category><![CDATA[components cakephp]]></category>
		<category><![CDATA[love cakephp]]></category>
		<category><![CDATA[upload de imagens]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=951</guid>
		<description><![CDATA[Na verdade a classe se chama somente class.upload.php ou Class Upload, é um nome meio genérico e por isso os desenvolvedores adotaram esta classe como Classe Verot. Isso porque Verot é o sobrenome do criador da class, seu nome é Colin VEROT. Até hoje eu não encontrei uma class tão completa para trabalhar com imagens [...]]]></description>
			<content:encoded><![CDATA[<p>Na verdade a classe se chama somente class.upload.php ou Class Upload, é um nome meio genérico e por isso os desenvolvedores adotaram esta classe como Classe Verot. Isso porque Verot é o sobrenome do criador da class, seu nome é <a href="http://www.verot.net/home.htm">Colin VEROT</a>.</p>
<p>Até hoje eu não encontrei uma class tão completa para trabalhar com imagens como esta, uso já faz alguns anos e hoje trabalhando com cakephp não foi diferente. Vou explicar aqui um pouco de como trabalhar com esta class dentro do Cakephp.</p>
<p>Primeiramente devemos transformar a class em um component. É muito simples, um component nada mais é do que uma class, então só devemos colocá-la dentro de uma class e estender para o objeto.</p>
<p>Baixe a class normal neste link: <a href="http://www.verot.net/php_class_upload_download.htm" target="_blank">http://www.verot.net/php_class_upload_download.htm</a></p>
<p>Abra a class com seu editor e insira no inicio:</p>
<pre class="brush: php">
class UploadComponent extends Object {
</pre>
<p><em> Obs: Não se esquece de fechar a class no final.</em> <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Coloque dentro da pasta de components do seu projeto.</p>
<p>Pulando a parte de formulários e html, vamos ver como fica o controller.</p>
<p>No controller, habilite o component com <code>public $components = array('Upload');</code></p>
<p>O script para fazer upload é bem simples, você pode até criar uma função no controller e depois chamar a função pelo método, veja como eu crio a função:</p>
<pre class="brush: php">

private function uploadImg($imagem){
$this-&gt;Upload-&gt;upload($imagem);
$imgName = date(&#039;dmY_His&#039;);
$this-&gt;Upload-&gt;file_new_name_body   = $imgName;
$this-&gt;Upload-&gt;image_resize         = true;
$this-&gt;Upload-&gt;image_x              = 400;
$this-&gt;Upload-&gt;image_ratio_y        = true;
$this-&gt;Upload-&gt;jpeg_quality         = 70;
$this-&gt;Upload-&gt;allowed = array(&#039;image/jpeg&#039;,&#039;image/jpg&#039;,&#039;image/gif&#039;);
$this-&gt;Upload-&gt;process(&quot;img/usuarios/&quot;);
if ($this-&gt;Upload-&gt;processed) {
$this-&gt;Upload-&gt;clean();
} else {
$this-&gt;erro = $this-&gt;Upload-&gt;error;
}
return $imgName.&quot;.&quot;.$this-&gt;Upload-&gt;file_src_name_ext;
}
</pre>
<p><strong>Linha 01:</strong> Iniciamos a função, eu criei como private, mas caso você precise usá-la em outros controllers, substitua private por public.</p>
<p><strong>Linha 02:</strong> Iniciamos o componente nesta linha e o atribuímos a imagem. A variavel $imagem deve receber o array completo de um arquivo.</p>
<p><strong>Linha 03:</strong> Definimos um nome padrão para o arquivo, eu costumo criar o arquivo como dia, mes, ano, hora, minuto e segundo.</p>
<p><strong>Linha 04:</strong> Atribuímos o nome padrão que criamos para a variável do component <em>file_new_name_body</em>. O componente vai copiar o arquivo e dar o nome que atribuímos e não o mesmo nome do arquivo original.</p>
<p><strong>Linha 05:</strong> image_resize serve para habilitar o redimensionamento da imagem. Caso ele esteja como false, a linhas 06 e 07 não irão funcionar.</p>
<p><strong>Linha 06: </strong>Em image_x definimos o tamanho do redimensionamento da imagem.</p>
<p><strong>Linha 07: </strong> image_ratio_y é muito importante, se a imagem estiver com o redimensionamento habilitado, esta variável faz que a altura da imagem seja redimencionada na proporção da largura, assim a imagem não fica distorcida.</p>
<p><strong>Linha 08:</strong> A jpeg_quality copia o arquivo na qualidade escolhida, neste caso com a qualidade 70.</p>
<p><strong>Linha 09: </strong>Allowed configura os tipos de arquivos que serão aceitos. Para aceitar todos os tipos de de imagens, é só colocar <em><span style="color: #999999;">image/*</span></em>.</p>
<p><strong>Linha 10:</strong> Process é comando que executa o upload. Dentro de Process é o diretório que o arquivo será gravado.</p>
<p><strong>Linha 11:</strong> Verifica se o upload foi um sucesso.</p>
<p><strong>Linha 12:</strong> Se o upload for um sucesso, a função clean() vai executar uma limpeza do component.</p>
<p><strong>Linha 14:</strong> Se o upload falhar, a função irá retornar o erro na variável $this-&gt;erro.</p>
<p><strong>Linha 16: </strong><span><span style="margin-left: 0px ! important;"><code>file_src_name_ext</code></span></span> pega a extensão do arquivo, então eu aproveito para montar o nome do arquivo completo e retornar na função.</p>
<p>Dentro do método é só chamar a função, veja um exemplo:</p>
<pre class="brush: php">
$this-&gt;data[&#039;Model&#039;][&#039;imagem&#039;] = $this-&gt;uploadImg($this-&gt;data[&#039;Model&#039;][&#039;imagem&#039;]);
</pre>
<p>Para trabalhar com o erro que a função gerou, basta imprimir a variável $this-&gt;erro.</p>
<p>A Class Verot é muito bem documentada, seu autor teve um cuidado nesse processo, tem uma explicação completa sobre todos os recursos da class. Você pode acompanhar a documentação completa neste link: <a href="http://www.verot.net/res/sources/class.upload.html" target="_blank">http://www.verot.net/res/sources/class.upload.html</a>.</p>
<p>Vou listar alguns dos recursos que a classe tem:</p>
<ul>
<li>Aplicar marcas d&#8217;agua na imagem</li>
<li>Escrever na imagem</li>
<li>Alterar contraste</li>
<li>Aplicar  efeito negative</li>
<li>Cortar imagem</li>
<li>Redimensionar de forma inteligente</li>
<li>Alterar qualidade</li>
<li>É possível detectar a largura e altura da imagem e validar</li>
<li>Converter em outros formatos: jpg, gif, png, bmp e etc</li>
<li>Dar zoom na imagem</li>
</ul>
<p>Há muito mais recursos, vale a pena conferir sua documentação.</p>
<blockquote style='font-size:11px;'><p>
<strong>Atualização [02-11-09]</strong><br />
Como algumas pessoas tiveram dúvidas quanto o component para cekaphp da class verot, disponibilizei para download neste link: <a href="http://www.renanlima.com/downloads/uploadVerot.zip">http://www.renanlima.com/downloads/uploadVerot.zip</a>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/cakephp-trabalhando-upload-com-a-classe-verot/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Cakephp &#8211; Trabalhando com themas (Themed)</title>
		<link>http://www.renanlima.com/blog/cakephp-trabalhando-com-themas-themed/</link>
		<comments>http://www.renanlima.com/blog/cakephp-trabalhando-com-themas-themed/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 02:00:34 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[tema cakephp]]></category>
		<category><![CDATA[theme cakephp]]></category>
		<category><![CDATA[themed]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=932</guid>
		<description><![CDATA[Estou trabalhando no desenvolvimento de um pequeno CMS com o Cakephp e estava em busca de uma solução para customização de temas, foi em meio de pesquisas que descobri que o Cakephp tem o tal Themed. Então, ele é, digamos assim, mágico. Na prática No seu controller, declare as seguintes variáveis: var $view = &#039;Theme&#039; [...]]]></description>
			<content:encoded><![CDATA[<p>Estou trabalhando no desenvolvimento de um pequeno CMS com o Cakephp e estava em busca de uma solução para customização de temas, foi em meio de pesquisas que descobri que o Cakephp tem o tal Themed. Então, ele é, digamos assim, mágico.</p>
<p><strong>Na prática</strong><br />
No seu <strong>controller</strong>, declare as seguintes variáveis:</p>
<pre class="brush: php">var $view = &#039;Theme&#039;
var $theme = &#039;seuTema&#039;</pre>
<p><strong>Linha 01:</strong>  Diz ao sistema que este controller vai usar o Themed e não o sistema de layouts padrão.<br />
<strong>Linha 02:</strong> Define o nome do template(themed) que será usado. SeuTema é o nome do tema a ser usado.</p>
<p><em>Obs: Você pode definir o tema($theme) em cada Método: <code>$this->theme = ‘segundoTema’</code></em></p>
<p>Agora é preciso colocar os arquivos do tema no diretório certo, veja um exemplo:</p>
<pre class="brush: php">/app/views/themed/seuTema
/app/views/themed/seuTema/layouts/
/app/views/themed/seuTema/layouts/default.ctp
/app/views/themed/seuTema/controller/
/app/views/themed/seuTema/controller/action/
/app/views/themed/seuTema/controller/action/index.ctp</pre>
<p>Onde ‘seuTema’ é o nome do tema que será usado, o mesmo declarado na variável theme (<code>var $theme = 'example'</code>).</p>
<p>Observe que o controller fica dentro do template, assim dá para trabalharmos com mais liberdade em cada template.</p>
<p>Para os arquivos que ficam no webroot, trata-os como o exemplo abaixo:</p>
<pre class="brush: php">/app/webroot/themed/seuTema/js/
/app/webroot/themed/seuTema/js/jquery.js
/app/webroot/themed/seuTema/css/
/app/webroot/themed/seuTema/css/style.css
/app/webroot/themed/seuTema/img/
/app/webroot/themed/seuTema/img/logo.jpg</pre>
<p>Simples não?<br />
Bom, as coisas ficam mais interessantes quando estamos usando mais de um template. Experimente e estude, é um ótimo recurso.</p>
<p>Fonte: <a href="http://book.cakephp.org/pt/view/488/Themes">http://book.cakephp.org/pt/view/488/Themes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/cakephp-trabalhando-com-themas-themed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cakephp &#8211; Inserindo mais de um registro no banco de dados</title>
		<link>http://www.renanlima.com/blog/inserindo-mais-de-um-registro-no-banco-de-dados/</link>
		<comments>http://www.renanlima.com/blog/inserindo-mais-de-um-registro-no-banco-de-dados/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 20:43:39 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=915</guid>
		<description><![CDATA[Hoje me deparei com um probleminha ao precisar inserir mais de um registro no banco de uma vez. A solução que eu procurava era para ter o seguinte efeito: INSERT INTO tabela (titulo,created) VALUES (&#039;11111&#039;, &#039;2009-09-28 17:05:03&#039;); INSERT INTO tabela (titulo,created) VALUES (&#039;22222&#039;, &#039;2009-09-28 17:05:03&#039;); INSERT INTO tabela (titulo,created) VALUES (&#039;33333&#039;, &#039;2009-09-28 17:05:03&#039;); INSERT INTO [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje me deparei com um probleminha ao precisar inserir mais de um registro no banco de uma vez.</p>
<p>A solução que eu procurava era para ter o seguinte efeito:</p>
<pre class="brush: sql">INSERT INTO tabela (titulo,created) VALUES (&#039;11111&#039;, &#039;2009-09-28 17:05:03&#039;);
INSERT INTO tabela (titulo,created) VALUES (&#039;22222&#039;, &#039;2009-09-28 17:05:03&#039;);
INSERT INTO tabela (titulo,created) VALUES (&#039;33333&#039;, &#039;2009-09-28 17:05:03&#039;);
INSERT INTO tabela (titulo,created) VALUES (&#039;44444&#039;, &#039;2009-09-28 17:05:03&#039;);
INSERT INTO tabela (titulo,created) VALUES (&#039;55555&#039;, &#039;2009-09-28 17:05:03&#039;);
</pre>
<p>Ou seja, eu precisava inserir uma série de registros de uma vez, sendo que no cakephp, se você escrever <em>$this->Model->save($this->data)</em> para um array com todos os campos, ele salva somente o ultimo registro, resultando em uma única inserção.</p>
<p>Para se ter sucesso nesta situação, seu array deve estar configurado conforme abaixo:<br />
<em>Não precisa estar configurado necessariamente assim, mas a meu ver, é a mais adequada.</em></p>
<pre class="brush: html">array(
     [Model] =&gt; array(
          [0] =&gt; array(
               [titulo] =&gt; &#039;111111&#039;
               [texto] =&gt; &#039;xxxxxxx&#039;
          )
          [2] =&gt; array(
               [titulo] =&gt; &#039;222222&#039;
               [texto] =&gt; &#039;xxxxxxx&#039;
          )
          [3] =&gt; array(
               [titulo] =&gt; &#039;333333&#039;
               [texto] =&gt; &#039;xxxxxxx&#039;
         )
     )
)</pre>
<p>Em seu controller, você vai seguir a seguinte lógica:</p>
<pre class="brush: php">foreach($this-&gt;data[&#039;Model&#039;] as $item){
          $this-&gt;Model-&gt;save($item);
          $this-&gt;Model-&gt;id = null;
}</pre>
<p>Explicando:<br />
<strong>Linha 1:</strong> Passamos um foreach no array $this->data['Model']. Usamos este array para cair direto no array útil para este recurso que é o array Model.<br />
<strong>Linha 2:</strong> Executamos o SAVE no model, normalmente. A diferença é que estaremos pegando o resultado do foreach, ou seja, estaremos pegando um bloco por vez do array e salvando.<br />
<strong>Linha 3:</strong> É aqui que resolvemos o problema. Ao fim de cada inserção, devemos anular o ID. Se você não anular este ID, o Cakephp irá salvar somente o último insert, isso porque ele vai atribuindo o ID constantemente e no final, ele pega somente o id que está na variavel que é o último.</p>
<p>Essa dica não é daquelas que se acha facilmente na documentação do Cakephp, tão pouco no google, então, está aí a dica. Qualquer dúvida ou outras soluções, pode postar aqui.</p>
<p><strong style='color:#660000'>Atualização:</strong> <em>29/09/09</em><br />
Segue a dica do <a href="http://richardathome.com/">Richard</a>, que é usar o mesmo array mostrado nest post e no save, colocar <code>$this->Model->saveAll($data)</code>. Isso já resolve o problema e dispensa o uso do foreach.</p>
<p>Consulte o manual: http://book.cakephp.org/pt/view/75/Saving-Your-Data</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/inserindo-mais-de-um-registro-no-banco-de-dados/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>CakePHP &#8211; Inserindo arquivos JS e Css no template</title>
		<link>http://www.renanlima.com/blog/inserindo-arquivos-js-e-css-no-template/</link>
		<comments>http://www.renanlima.com/blog/inserindo-arquivos-js-e-css-no-template/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 05:14:52 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[incorporar css]]></category>
		<category><![CDATA[incorporar javascript]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=704</guid>
		<description><![CDATA[Vou dar uma dica bem simples e básica, que vai te ajudar muito caso esteja iniciando em cakephp, pelo menos vai economizar uns 5 ou 10 minutos de busca já que ainda não se acostumou com o CookBook. Vamos ver como adicionar arquivos Javascript e Css no template. Primeiramente, habilite o helper necessário. Vá no [...]]]></description>
			<content:encoded><![CDATA[<p>Vou dar uma dica bem simples e básica, que vai te ajudar muito caso esteja iniciando em cakephp, pelo menos vai economizar uns 5 ou 10 minutos de busca já que ainda não se acostumou com o CookBook. Vamos ver como adicionar arquivos Javascript e Css no template.</p>
<p>Primeiramente, habilite o helper necessário.</p>
<p>Vá no controller que você vai trabalhar e defina:</p>

<div class="wp_syntax"><div class="code"><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: #0000ff;">'html'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'Javascript'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Iremos trabalhar com ambos. Feito isso no controller, agora no template que corresponde a este controller, você fará da seguinte forma para incorporar os arquivos:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$javascript</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>link<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'nome_arquivo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$html</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>css<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'nome_arquivo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Simples, não?</p>
<p><strong>Links úteis</strong></p>
<ul>
<li>Helpers HTML:  <a href="http://book.cakephp.org/view/206/Inserting-Well-Formatted-elements">http://book.cakephp.org/view/206/Inserting-Well-Formatted-elements</a></li>
<li>Core Helpers:  <a href="http://book.cakephp.org/view/181/Core-Helpers">http://book.cakephp.org/view/181/Core-Helpers</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/inserindo-arquivos-js-e-css-no-template/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CakePHP dentro de grandes empresas</title>
		<link>http://www.renanlima.com/blog/cakephp-dentro-de-grandes-empresas/</link>
		<comments>http://www.renanlima.com/blog/cakephp-dentro-de-grandes-empresas/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 20:59:25 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[love cakephp]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=221</guid>
		<description><![CDATA[Embora o CakePHP tenha lá seus 3 aninhos de vida, somente agora ele estourou entre os profissionais. CakePHP ganhou forças e mostra-se presente em grandes empresas. Em uma pesquisas que fiz no site www.cakephp.com.br e no titio Google.com. Pude perceber que as empresas estão procurando se informar quanto o CakePHP, algumas até pedem experiência com [...]]]></description>
			<content:encoded><![CDATA[<p>Embora o CakePHP tenha lá seus 3 aninhos de vida, somente agora ele estourou entre os profissionais.<br />
CakePHP ganhou forças e mostra-se presente em grandes empresas.</p>
<p>Em uma pesquisas que fiz no site www.cakephp.com.br e no titio Google.com. Pude perceber que as empresas estão procurando se informar quanto o CakePHP, algumas até pedem experiência com CakePHP em seu currículo.</p>
<p>Em uma enquete do site cakephp.com.br(04/2008), mostra que em segundo lugar, as pessoas usam o cakephp no trabalho. Em primeiro lugar ficou quem usa o cakephp para estudo.</p>
<p>Então isso quer dizer algo ao mercado, afinal, os frameworks estão aí, tem muitos bons e cabe a sua empresa(e você) escolher um que realmente cumprem com suas necessidades.</p>
<p>Aqui na universidade onde trabalho estamos fazendo tudo que é novo em CakePHP, não dá para passar o que é antigo para cake, mas o que é novo estamos usando esta nova e amigável ferramenta. O ganho de tempo que estamos ganhando é grande e isso eu não queremos perder.</p>
<p>É fato que framework nos faz trabalhar mais rápido, além de ter uma organização excelente e seguir os padrões atuais. Uma coisa interessante e animadora é que o CakePHP está cada vez mais semelhante ao Ruby, isso de fato está fazendo uma grande diferença em comparação as outras ferramentas. Isso porque o Ruby está sendo muito elogiado, principalmente nos vídeos que compara o JAVA com RUBY, e nessa, quem leva a melhor é o Ruby pela sua rapidez, organização, flexibilidade, economia.. bem.. é melhor parar por aqui. <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Quanto a comunidade CakePHP, esta não para de crescer, conquistando novos seguidores e ajudando uns aos outros.</p>
<p>Ainda tem muita coisa pela frente, vamos ver o que vem por aí.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/cakephp-dentro-de-grandes-empresas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Enviando multiplos emails com o PHPmailer</title>
		<link>http://www.renanlima.com/blog/enviando-multiplos-emails-com-o-phpmailer/</link>
		<comments>http://www.renanlima.com/blog/enviando-multiplos-emails-com-o-phpmailer/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 22:00:57 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[phpmailer]]></category>
		<category><![CDATA[phpmailer com cakephp]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=227</guid>
		<description><![CDATA[Neste artigo vou mostrar como enviar multiplos emails com o PHPmailer adaptado ao CakePHP. Senti a necessidade em usar este tipo de envio, pois o component do cake que trabalha como PHPmailer não tem este recurso, por tanto, teremos que fazer pequenas mudanças no component. Se você não viu o artigo que fala como usar [...]]]></description>
			<content:encoded><![CDATA[<p>Neste artigo vou mostrar como enviar multiplos emails com o PHPmailer adaptado ao CakePHP.<br />
Senti a necessidade em usar este tipo de envio, pois o component do cake que trabalha como PHPmailer não tem este recurso, por tanto, teremos que fazer pequenas mudanças no component.<br />
<a title="PHPmailer com cakephp" href="http://www.renanlima.com/blog/2008/04/25/phpmailer-com-cakephp/" target="_blank"> Se você não viu o artigo que fala como usar o PHPmailer no CakePHP, clique aqui.</a></p>
<p>Vamos lá!</p>
<p>No component Email, basta substituir a linha que contem <strong><span style="color: #333399;">$mail-&gt;AddAddress($this-&gt;to, $this-&gt;toName );</span></strong> por este conjunto de código abaixo:</p>
<p><span style="color: #333399;">if(is_array($this-&gt;to))<br />
{<br />
foreach($this-&gt;to as $item)<br />
{<br />
$mail-&gt;AddAddress($item['Email']['to'],$item['Email']['name']);<br />
}<br />
}<br />
else<br />
{<br />
$mail-&gt;AddAddress($this-&gt;to, $this-&gt;toName );<br />
}</span></p>
<p>No código acima está a mágica em enviar multiplos emails com o PHPmailer.</p>
<p>Este script faz o seguinte:<br />
Ele verifica se a variavel<strong> $this-&gt;to</strong> é um array, se for, ela ler todo o array atravez do <strong>foreach</strong> e alimenta a função <strong>AddAddress</strong>, caso a variavel <strong>$this-&gt;to</strong> não seja um array, o script age normalmente, como antes. Ou seja, esta mudança no código não vai fazer a diferença alguma em outras aplicações suas que não utilizam envio de multiplos emails com o PHPmailer.</p>
<p>Feito!<br />
Agora vamos trabalhar no controller.<br />
Onde seria <span style="color: #333399;">$this-&gt;Email-&gt;to</span>, será um array, veja o exemplo abaixo:</p>
<p><span style="color: #333399;">$email['Email']['to']   = &#8216;webrenanlima@gmail.com&#8217;;<br />
$email['Email']['name'] = &#8220;Renan Lima&#8221;;</span></p>
<p>Para gerar diversos emails dentro de um loop, basta seguir o exemplo abaixo:</p>
<p><span style="color: #333399;">$result = $this-&gt;Usuario-&gt;findAll();</span></p>
<p><span style="color: #333399;">$i=0;<br />
foreach($result['CoorporativoUsuario'] as $item)<br />
{<br />
$email[]['Email']['to']   = &#8216;webrenanlima@gmail.com&#8217;;</span><br />
<span style="color: #333399;">$email[]['Email']['name'] = &#8220;Renan Lima&#8221;;<br />
$i++;<br />
}</span></p>
<p>Se você quiser enviar um email para uma única pessoa, basta usar o método tradicional: <span style="color: #333399;">$this-&gt;Email-&gt;to</span>.</p>
<p>Para você que não viu o tutorial que explica como usar o <a href="http://www.renanlima.com/blog/2008/04/25/phpmailer-com-cakephp/" target="_blank">PHPmailer com o cakephp</a>, veja aqui na matéria anterior: <a title="PHPmailer com cakePHP" href="http://www.renanlima.com/blog/2008/04/25/phpmailer-com-cakephp/" target="_blank">PHPmailer com CakePHP</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/enviando-multiplos-emails-com-o-phpmailer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPmailer com CakePHP</title>
		<link>http://www.renanlima.com/blog/phpmailer-com-cakephp/</link>
		<comments>http://www.renanlima.com/blog/phpmailer-com-cakephp/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 21:57:15 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[phpmailer]]></category>
		<category><![CDATA[phpmailer com cakephp]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=228</guid>
		<description><![CDATA[Neste post veremos como usar o já consagrado PHPmailer com o outro consagrado(rs) chamado CakePHP. 1. Baixe o PHPmailer neste link: PHPmailer 2. No CakePHP, crie uma pasta chamada &#8216;phpmailer&#8217; dentro de &#8216;app/vendors&#8217;, ficando desta forma: app/vendors/phpmailer. Agora coloque dentro desta pasta os arquivos &#8216;class.phpmailer.php&#8217; e &#8216;class.smtp.php&#8217;. 3. Crie um component chamado &#8216;Email&#8217;, ficando neste [...]]]></description>
			<content:encoded><![CDATA[<p>Neste post veremos como usar o já consagrado PHPmailer com o outro consagrado(rs) chamado CakePHP.</p>
<p><strong>1.</strong> Baixe o PHPmailer neste link: <a title="PHPmailer" href="http://phpmailer.sourceforge.net/" target="_blank">PHPmailer</a></p>
<p><strong>2.</strong> No CakePHP, crie uma pasta chamada &#8216;phpmailer&#8217; dentro de &#8216;app/vendors&#8217;, ficando desta forma: app/vendors/phpmailer. Agora coloque dentro desta pasta os arquivos &#8216;class.phpmailer.php&#8217; e &#8216;class.smtp.php&#8217;.</p>
<p><strong>3.</strong> Crie um component chamado &#8216;Email&#8217;, ficando neste caminho: app/controllers/components/email.php.</p>
<p><strong>4. </strong>Dentro do arquivo email.php, coloque o código que está dentro deste arquivo: <a title="email.php" href="http://bakery.cakephp.org/articles/download_code/94/block/2" target="_blank">Ver código de email.php</a></p>
<p>OBS: No arquivo email.php, eu fiz umas modificações e isso fica a critério seu.<br />
Eu comentei as seguintes linhas:</p>
<p style="padding-left: 30px;"><span style="color: #333399;">//var $smtpUserName = &#8221;;  // SMTP username<br />
//var $smtpPassword = &#8221;; // SMTP password</span></p>
<p>OBS 2: A porta a ser usada normalmente é <strong>25</strong> mesmo.</p>
<p><strong>5.</strong> No controller você deve invocar o component criado no passo anterior da seguinte forma: <span style="color: #333399;">var $components = array(&#8216;Email&#8217;);</span></p>
<p>Script de envio para ser usado no controller e dentro de um método é claro:</p>
<p style="padding-left: 30px;"><span style="color: #333399;"> $this-&gt;Email-&gt;template = &#8216;email/confirm&#8217;; // Template a ser usado no envio</span></p>
<p style="padding-left: 30px;"><span style="color: #333399;">$this-&gt;set(&#8216;data&#8217;, $data); // Conteúdo dinamico a ser passado para o template (opcional)<br />
$this-&gt;Email-&gt;to = &#8216;webrenanlima@gmail.com&#8217;; // Destinatário<br />
$this-&gt;Email-&gt;subject = &#8216;Seu assunto&#8217;; // Assunto do email</span></p>
<p style="padding-left: 30px;"><span style="color: #333399;">$this-&gt;Email-&gt;attach($fully_qualified_filename, optionally $new_name_when_attached);<br />
// Para enviar arquivos em anexo (opcional)</span></p>
<p style="padding-left: 30px;"><span style="color: #333399;">$result = $this-&gt;Email-&gt;send(); // necessário para enviar os emails</span></p>
<p><strong>Na prática</strong><br />
Vou explicar aqui como funciona o PHPmailer com CakePHP na prática.</p>
<p>Você deverá criar dois arquivos(template) para o email, um com o conteúdo em HTML e outro somente com texto.</p>
<p>Como no script acima você informou que o template a ser usado será &#8220;email/confirm&#8221;, isso quer dizer que existirá dois arquivos dentro neste caminho: &#8216;view/email/&#8217;, um chamado &#8216;confirm_html.thtml&#8217; e outro como &#8216;confirm_text.thtml&#8217;.</p>
<p>A lógica é simples, o valor do template é <span style="color: #333399;">email</span><em><span style="color: #808080;">(pasta)</span></em><span style="color: #333399;">/nome_do_arquivo</span>, não é preciso informar o nome completo( ex: confirm_html.thtml). Ok?</p>
<p>Não é obrigatório você criar os templates dentro da pasta &#8216;email&#8217;, eu mesmo coloco os templates dentro da pasta da view de seu controller.</p>
<p>Mas simples que usar o PHPmailer sem o cakePHP. rs<br />
Além de ficar mais organizado (como tudo no cakePHP).</p>
<p>Artigo baseado em <a title="sending-email-with-phpmailer" href="http://bakery.cakephp.org/articles/view/sending-email-with-phpmailer" target="_blank">http://bakery.cakephp.org/articles/view/sending-email-with-phpmailer</a></p>
<blockquote><p><a href="http://www.vvssistemas.com.br/">Dica do Fábio</a></p>
<p>Na linha 73, troque aquele metodo “vendor” que foi  descontiuado na versão 1.2 por:</p>
<p><em>App::import(‘Vendor’, ‘phpmailer’, array(‘file’ =&gt;  ‘phpmailer’.DS.’class.phpmailer.php’));</em></p></blockquote>
<p><a title="Multiplos emails com o PHPmailer" href="http://www.renanlima.com/blog/2008/04/25/enviando-multiplos-emails-com-o-phpmailer/" target="_blank">Veja também como enviar multiplos emails com o PHPmailer.</a></p>
<p style="padding-left: 30px;">
<p style="padding-left: 30px;">
<p style="padding-left: 30px;">
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/phpmailer-com-cakephp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>FCKeditor com CakePHP</title>
		<link>http://www.renanlima.com/blog/fckeditor-com-cakephp/</link>
		<comments>http://www.renanlima.com/blog/fckeditor-com-cakephp/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 22:00:57 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[fckeditor]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=205</guid>
		<description><![CDATA[Hoje vou passar para você alguns truques de como rodar o FCKeditor no CakePHP. FCKeditor para quem não sabe, é um editor multplataforma que com seus diversos recursos, nos ajuda a resolver os problemas que ocorrem no dia-a-dia. Dentre seus recursos, ele faz: upload,coloca cores, forms, negrito,fonte html, imagem,link&#8230; e muuuito mais. Tudo bem que [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje vou passar para você alguns truques de como rodar o FCKeditor no CakePHP.</p>
<p>FCKeditor para quem não sabe, é um editor multplataforma que com seus diversos recursos, nos ajuda a resolver os problemas que ocorrem no dia-a-dia. Dentre seus recursos, ele faz: upload,coloca cores, forms, negrito,fonte html, imagem,link&#8230; e muuuito mais.</p>
<p>Tudo bem que eu acho que ele tem coisas de mais, por isso é bom dar uma filtrada antes de subir para o servidor, mas isso vamos ver aqui neste post.</p>
<p>Ingredientes:</p>
<ul>
<li><a title="fckeditor - download" href="http://www.fckeditor.net/download" target="_blank">FCKeditor 2.6</a></li>
<li>CakePHP 1.1.19.6305  ( 1/01/2008)</li>
</ul>
<p>Estudando por um artigo do <a title="Bakery" href="http://bakery.cakephp.org/" target="_blank">Bakery</a>, tive alguns erros, talvez pelo fato do artigo tratar de uma versão anterior ao 2.6, por isso resolvi escrever com ousa-lo e ajuda-los com alguns truques.</p>
<p>Vamos ao bolo. : )</p>
<p><strong>1. </strong>Como estamos usando o cakePHP, não vamos precisar de nenhuma outra linguagem, portanto, na pasta <em><span style="color: #333399;">e</span><span style="color: #333399;">ditor/filemanager/connectors</span></em> devemos excluir todas as pastas com o nome diferente de <strong>php</strong>.</p>
<p><strong>2.</strong> No FCKeditor, copie a pasta <strong><span style="color: #333399;">editor </span></strong>e os arquivos  <span style="color: #333399;">fckeditor.js</span>, <span style="color: #333399;">fckconfig.js</span>, <span style="color: #333399;">fckstyles.xml </span>e <span style="color: #333399;">fcktemplates.xml</span> para a pasta <span style="color: #333399;">app/webroot/js</span> do Cake.</p>
<p><strong>3.</strong> No Cake, edite o arquivo <span style="color: #333399;">app/webroot/.htaccess</span> e adicione as seguintes linhas<span style="color: #333399;">:</span></p>
<p style="padding-left: 30px;"><span style="color: #333399;"><code><span> AddType application/x-javascript .js<br />
AddType text/css .css</span></code></span></p>
<p>Caso você não consiga abrir o arquivo, mude a extensão do mesmo para txt e faz as alterações, depois disso volte-o para a extensão inicial.<br />
O conteúdo deste arquivo deverá ficar semelhante a isso:</p>
<p><span style="color: #333399;">&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]<br />
<strong><code><span> AddType application/x-javascript .js<br />
AddType text/css .css</span></code></strong><br />
&lt;/IfModule&gt;</span></p>
<p><strong>4.</strong> Configure o arquivo <span style="color: #333399;">app/views/helpers/fck.php</span> ao seu gosto.<br />
Você pode criar outros ToolbarSets ou mesmo modificar os que existem. Não esqueça de fazer backup heim!</p>
<p><strong>5.</strong> Agora precisaremos criar um helper. Crie o seguinte arquivo: <span style="color: #333399;">app/views/helpers/fck.php</span><br />
Seu conteúdo deverá conter o código abaixo:</p>
<p><span style="color: #333399;">&lt;?php<br />
class FckHelper extends Helper<br />
{<br />
function load($id, $toolbar = &#8216;Email&#8217;) {<br />
foreach (explode(&#8216;/&#8217;, $id) as $v) {<br />
$did .= ucfirst($v);<br />
}</span></p>
<p><span style="color: #333399;">return &lt;&lt;&lt;FCK_CODE<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
fckLoader_$did = function () {<br />
var bFCKeditor_$did = new FCKeditor(&#8216;$did&#8217;);<br />
bFCKeditor_$did.BasePath = &#8216;js/&#8217;;<br />
bFCKeditor_$did.ToolbarSet = &#8216;$toolbar&#8217;;<br />
bFCKeditor_$did.Width = &#8217;500&#8242;;<br />
bFCKeditor_$did.Height = &#8217;500&#8242;;<br />
bFCKeditor_$did.ReplaceTextarea();<br />
}<br />
fckLoader_$did();<br />
&lt;/script&gt;<br />
FCK_CODE;<br />
}<br />
}<br />
?&gt;</span></p>
<p>Algo que julgo importante é colocar o <span style="color: #333399;">BasePath</span> como <strong>&#8216;js/&#8217;</strong> e não como &#8216;/js/&#8217;.</p>
<p style="padding-left: 30px;"><strong>DICA: </strong>Certa vez tive que colocar o BasePath como &#8216;<strong>../js/</strong>&#8216; para funcionar no servidor remoto. Portanto, caso dê algum problema tente este valor.</p>
<p><strong>6.</strong> Coloque o código<code><span style="color: #0000bb;"> &lt;?php echo $javascript-&gt;link('fckeditor'); ?&gt; </span></code>em todas as páginas que você irá usar o fck. Eu particularmente prefiro por no Layout.</p>
<p><strong>7.</strong> Coloque o código <span style="color: #333399;">var $helpers = array(&#8216;Html&#8217;, &#8216;Form&#8217;, &#8216;Javascript&#8217;, &#8216;Fck&#8217;);</span> em seu controller.</p>
<p><strong>8.</strong> Crie ua view para este controller e coloque o seguinte código dentro:<br />
<span style="color: #333399;">&lt;div class=&#8221;required&#8221;&gt;<br />
&lt;?php echo $form-&gt;labelTag( &#8216;Comment/body&#8217;, &#8216;Body&#8217; );?&gt;<br />
&lt;?php echo $html-&gt;textarea(&#8216;Comment/body&#8217;, array(&#8216;cols&#8217; =&gt; &#8217;60&#8242;, &#8216;rows&#8217; =&gt; &#8217;10&#8242;));?&gt;<br />
&lt;?php echo $fck-&gt;load(&#8216;Comment/body&#8217;); ?&gt;<br />
&lt;?php echo $html-&gt;tagErrorMsg(&#8216;Comment/body&#8217;, &#8216;Please enter the Body.&#8217;);?&gt;<br />
&lt;/div&gt;</span></p>
<p><strong>9.</strong> Para finalizar, abra o arquivo <span style="color: #333399;">app/webroot/ js/editor/filemanager/ browser/default/ connectors/php/ config.php</span> e procure pela linha <span style="color: #333399;">$Config['Enabled']</span> e <span style="color: #333399;">$Config['UserFilesPath']</span>, coloque seus valores da seguinte forma:</p>
<p><span style="color: #333399;">$Config['Enabled'] = true;<br />
$Config['UserFilesPath'] = &#8216;/app/webroot/files/&#8217;;</span></p>
<p>UFFA! Enfim chegamos.<br />
Vou beber uma água e volto mais tarde. <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/fckeditor-com-cakephp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cakephp e seus acumulos de cache. SOLUÇÃO!</title>
		<link>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-solucao/</link>
		<comments>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-solucao/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 19:20:04 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[beforeSave]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/2008/03/07/cakephp-e-seus-acumulos-de-cache-solucao/</guid>
		<description><![CDATA[Lembra do pog que usei para resolver uma situação no cake? Se não lembra veja aqui: Bem galera, descobri a solução! Não contente em usar o POG resolvi pesquisar e encontrei um recurso que o cake disponibiliza chamado beforeSave. O beforeSave faz nada mais que executar uma instrução antes de salvar um dado no banco. [...]]]></description>
			<content:encoded><![CDATA[<p>Lembra do pog que usei para resolver uma situação no cake? Se não lembra <a href="http://www.renanlima.com/blog/2008/03/06/cakephp-e-seus-acumulos-de-cache-algo-a-ser-melhorado/" target="_blank">veja aqui</a>:</p>
<p>Bem galera, descobri a solução!</p>
<p>Não contente em usar o POG resolvi pesquisar e encontrei um recurso que o cake disponibiliza chamado beforeSave.</p>
<p>O beforeSave faz nada mais que executar uma instrução antes de salvar um dado no banco. Assim como ele, tem o afterSave, beforeFind e afterFind. O after tem o efeito oposto do before.</p>
<p>É muito simples de usar, veja os códigos abaixo:</p>
<p><strong>Sem o before:</strong></p>
<blockquote><p> $conditions    = array(&#8216;mes&#8217;=&gt;$mes,&#8217;ano&#8217;=&gt;$ano);<br />
$this-&gt;CoorporativoLigacoes-&gt;find($conditions);<br />
&#8230;<br />
&#8230;<br />
$this-&gt;CoorporativoLigacoes-&gt;save($this-&gt;data());</p></blockquote>
<p>Isso resultava em um erro, pois o resultado da consulta sempre será o mesmo, o ultimo dado cadastrado. Isso porque o cake salva no banco antes de fazer a consulta, ou melhor, ele executa as duas instruções ao mesmo tempo, mas o save é mais rápido.</p>
<p><strong>Agora veja a solução usando o beforeSave</strong></p>
<blockquote><p> function beforeSave()<br />
{<br />
$conditions    = array(&#8216;mes&#8217;=&gt;$mes,&#8217;ano&#8217;=&gt;$ano);<br />
$result = $this-&gt;CoorporativoLigacoes-&gt;find($conditions);<br />
return $result;<br />
}</p>
<p>function index()<br />
{<br />
$result = $this-&gt;beforeSave();  // este será executado primeiro<br />
$this-&gt;CoorporativoLigacoes-&gt;save($this-&gt;data()); // Este só será executado depois do beforeSave<br />
}</p></blockquote>
<p>O mesmo uso deste você pode aplicar no afterSave, beforeFind, afterFind, etc.</p>
<p>Qualquer dúvida, só postar aqui.</p>
<p><em><u>PS: Nada de POG.</u></em> <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-solucao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual do CakePHP em Português</title>
		<link>http://www.renanlima.com/blog/manual-do-cakephp-em-portugues/</link>
		<comments>http://www.renanlima.com/blog/manual-do-cakephp-em-portugues/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 14:55:15 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[manual em portugues]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/2008/03/07/manual-do-cakephp-em-portugues/</guid>
		<description><![CDATA[Está disponível o manual do Cake em português, pode espalhar, a notícia vai agradar a todos que utilizam o framework. Segue o link: http://www.manual.cakephp.com.br/doku.php Bom estudo/consulta.]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><o :p></o>Está disponível o manual do Cake em português, pode espalhar, a notícia vai agradar a todos que utilizam o framework.</p>
<p class="MsoNormal">Segue o link: <a href="http://www.manual.cakephp.com.br/doku.php">http://www.manual.cakephp.com.br/doku.php</a></p>
<p class="MsoNormal">Bom estudo/consulta. <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> <o :p></o></p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/manual-do-cakephp-em-portugues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando um Controller sem Model</title>
		<link>http://www.renanlima.com/blog/usando-um-controller-sem-model/</link>
		<comments>http://www.renanlima.com/blog/usando-um-controller-sem-model/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 12:01:35 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/2008/03/07/usando-um-controller-sem-model/</guid>
		<description><![CDATA[Embora não faça muito sentido usar um Controller sem Model, um dia você vai precisar usar. É muito simples, basta declarar a variável $uses da seguinte forma no controller: Var $uses = array(''); Post atualizado: 09/07/2009]]></description>
			<content:encoded><![CDATA[<p>Embora não faça muito sentido usar um Controller sem Model, um dia você vai precisar usar.</p>
<p>É muito simples, basta declarar a variável $uses da seguinte forma no controller:</p>
<p style="padding-left: 30px;"><code>Var $uses = array('');</code></p>
<p><span style="color: #993300;"><strong>Post atualizado: </strong>09/07/2009</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/usando-um-controller-sem-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cakephp e seus acúmulos de cache. Problemas</title>
		<link>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-algo-a-ser-melhorado/</link>
		<comments>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-algo-a-ser-melhorado/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 22:57:38 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[cache]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/2008/03/06/cakephp-e-seus-acumulos-de-cache-algo-a-ser-melhorado/</guid>
		<description><![CDATA[Encontrei a solução deste problema e postei no blog, veja aqui. Cakephp e seus acúmulos de cache. Algo a ser melhorado. A partir de hoje vou começar a falar da minha experiência com o CakePHP, para os íntimos somente Cake. Tentarei passar a você o máximo de dicas. Hoje perdi algumas horas tentando resolver uma [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><em>Encontrei a solução deste problema e postei no blog, <a href="http://www.renanlima.com/blog/2008/03/07/cakephp-e-seus-acumulos-de-cache-solucao/" target="_blank">veja aqui</a>.</em></p>
<p>Cakephp e seus acúmulos de cache.  <strike>Algo a ser melhorado. </strike></p>
<p>A partir de hoje vou começar a falar da minha experiência com o <a href="http://pt.wikipedia.org/wiki/Cakephp" target="_blank">CakePHP</a>, para os íntimos somente Cake. Tentarei passar a você o máximo de dicas. <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Hoje perdi algumas horas tentando resolver uma questão no Cake. Tá rindo? Foi sinistro.</p>
<p>Estava precisando realizar as seguintes instruções dentro de um loop:</p>
<blockquote><p>- Verificar se o dado existe no banco<br />
- Se não existir, grava o dado no banco</p></blockquote>
<p>Bem, é uma coisa bem simples dentro de uma aplicação meio complexa, mas enfim, acontece que o cake armazena os dados buscados no banco em cache, isso melhora a performance do processo mas as vezes atrapalha.</p>
<p>Com o cash abastecido, mesmo que tivesse dado preenchido no banco, o cake não o encontrava, pois usava o cache do Find anterior e não me retornava nada.</p>
<p>Tentei usar o $cacheSources=false, getInsertId, execute, mas por incrível que pareça não funcionou.</p>
<p>Depois de algumas horas de tentativas resolvi usar uma espécie de <a href="http://desciclo.pedia.ws/wiki/POG" target="_blank">POG</a>. Eu não queria, mas pog sempre resolve.:)</p>
<p>Então eu coloquei a query &#8211; <em>como diz um amigo aqui do trabalho</em> – na mão. E lá fui eu “mysql_query(select &#8230;&#8230;&#8230;.);”.</p>
<p>Ual! Foi impressionante, mas funcionou. Isso mesmo, com o POG.</p>
<p>Depois ainda fiquei pesquisando o porque disso, será que é um bug do cake, eu não acredito, eu é que não devo estar sabendo usar isso adequadamente.</p>
<p>Bem, até agora eu não sei, se você souber, gostaria de saber. <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Perdi algumas horas mas adquiri conhecimento, isso vale mais.</p>
<p>Uma vez um amigo aqui do trabalho consegui resolver o mesmo problema simplesmente com o cacheSources, mas hoje, não foi o caso.</p>
<p>Até a próxima!</p>
<p align="center"><em>Encontrei a solução deste problema e postei no blog, <a href="http://www.renanlima.com/blog/2008/03/07/cakephp-e-seus-acumulos-de-cache-solucao/" target="_blank">veja aqui</a>.</em></p>
<p align="center">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/cakephp-e-seus-acumulos-de-cache-algo-a-ser-melhorado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
