Post com a tag CakePHP

PHPmailer com CakePHP

5

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 ‘phpmailer’ dentro de ‘app/vendors’, ficando desta forma: app/vendors/phpmailer. Agora coloque dentro desta pasta os arquivos ‘class.phpmailer.php’ e ‘class.smtp.php’.

3. Crie um component chamado ‘Email’, ficando neste caminho: app/controllers/components/email.php.

4. Dentro do arquivo email.php, coloque o código que está dentro deste arquivo: Ver código de email.php

OBS: No arquivo email.php, eu fiz umas modificações e isso fica a critério seu.
Eu comentei as seguintes linhas:

//var $smtpUserName = ”; // SMTP username
//var $smtpPassword = ”; // SMTP password

OBS 2: A porta a ser usada normalmente é 25 mesmo.

5. No controller você deve invocar o component criado no passo anterior da seguinte forma: var $components = array(‘Email’);

Script de envio para ser usado no controller e dentro de um método é claro:

$this->Email->template = ‘email/confirm’; // Template a ser usado no envio

$this->set(‘data’, $data); // Conteúdo dinamico a ser passado para o template (opcional)
$this->Email->to = ‘webrenanlima@gmail.com’; // Destinatário
$this->Email->subject = ‘Seu assunto’; // Assunto do email

$this->Email->attach($fully_qualified_filename, optionally $new_name_when_attached);
// Para enviar arquivos em anexo (opcional)

$result = $this->Email->send(); // necessário para enviar os emails

Na prática
Vou explicar aqui como funciona o PHPmailer com CakePHP na prática.

Você deverá criar dois arquivos(template) para o email, um com o conteúdo em HTML e outro somente com texto.

Como no script acima você informou que o template a ser usado será “email/confirm”, isso quer dizer que existirá dois arquivos dentro neste caminho: ‘view/email/’, um chamado ‘confirm_html.thtml’ e outro como ‘confirm_text.thtml’.

A lógica é simples, o valor do template é email(pasta)/nome_do_arquivo, não é preciso informar o nome completo( ex: confirm_html.thtml). Ok?

Não é obrigatório você criar os templates dentro da pasta ‘email’, eu mesmo coloco os templates dentro da pasta da view de seu controller.

Mas simples que usar o PHPmailer sem o cakePHP. rs
Além de ficar mais organizado (como tudo no cakePHP).

Artigo baseado em http://bakery.cakephp.org/articles/view/sending-email-with-phpmailer

Dica do Fábio

Na linha 73, troque aquele metodo “vendor” que foi descontiuado na versão 1.2 por:

App::import(‘Vendor’, ‘phpmailer’, array(‘file’ => ‘phpmailer’.DS.’class.phpmailer.php’));

Veja também como enviar multiplos emails com o PHPmailer.

FCKeditor com CakePHP

1

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… e muuuito mais.

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.

Ingredientes:

Estudando por um artigo do Bakery, 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.

Vamos ao bolo. : )

1. Como estamos usando o cakePHP, não vamos precisar de nenhuma outra linguagem, portanto, na pasta editor/filemanager/connectors devemos excluir todas as pastas com o nome diferente de php.

2. No FCKeditor, copie a pasta editor e os arquivos fckeditor.js, fckconfig.js, fckstyles.xml e fcktemplates.xml para a pasta app/webroot/js do Cake.

3. No Cake, edite o arquivo app/webroot/.htaccess e adicione as seguintes linhas:

AddType application/x-javascript .js
AddType text/css .css

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.
O conteúdo deste arquivo deverá ficar semelhante a isso:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
AddType application/x-javascript .js
AddType text/css .css

</IfModule>

4. Configure o arquivo app/views/helpers/fck.php ao seu gosto.
Você pode criar outros ToolbarSets ou mesmo modificar os que existem. Não esqueça de fazer backup heim!

5. Agora precisaremos criar um helper. Crie o seguinte arquivo: app/views/helpers/fck.php
Seu conteúdo deverá conter o código abaixo:

<?php
class FckHelper extends Helper
{
function load($id, $toolbar = ‘Email’) {
foreach (explode(‘/’, $id) as $v) {
$did .= ucfirst($v);
}

return <<<FCK_CODE
<script type=”text/javascript”>
fckLoader_$did = function () {
var bFCKeditor_$did = new FCKeditor(‘$did’);
bFCKeditor_$did.BasePath = ‘js/’;
bFCKeditor_$did.ToolbarSet = ‘$toolbar’;
bFCKeditor_$did.Width = ’500′;
bFCKeditor_$did.Height = ’500′;
bFCKeditor_$did.ReplaceTextarea();
}
fckLoader_$did();
</script>
FCK_CODE;
}
}
?>

Algo que julgo importante é colocar o BasePath como ‘js/’ e não como ‘/js/’.

DICA: Certa vez tive que colocar o BasePath como ‘../js/‘ para funcionar no servidor remoto. Portanto, caso dê algum problema tente este valor.

6. Coloque o código <?php echo $javascript->link('fckeditor'); ?> em todas as páginas que você irá usar o fck. Eu particularmente prefiro por no Layout.

7. Coloque o código var $helpers = array(‘Html’, ‘Form’, ‘Javascript’, ‘Fck’); em seu controller.

8. Crie ua view para este controller e coloque o seguinte código dentro:
<div class=”required”>
<?php echo $form->labelTag( ‘Comment/body’, ‘Body’ );?>
<?php echo $html->textarea(‘Comment/body’, array(‘cols’ => ’60′, ‘rows’ => ’10′));?>
<?php echo $fck->load(‘Comment/body’); ?>
<?php echo $html->tagErrorMsg(‘Comment/body’, ‘Please enter the Body.’);?>
</div>

9. Para finalizar, abra o arquivo app/webroot/ js/editor/filemanager/ browser/default/ connectors/php/ config.php e procure pela linha $Config['Enabled'] e $Config['UserFilesPath'], coloque seus valores da seguinte forma:

$Config['Enabled'] = true;
$Config['UserFilesPath'] = ‘/app/webroot/files/’;

UFFA! Enfim chegamos.
Vou beber uma água e volto mais tarde. ;)

Cakephp e seus acumulos de cache. SOLUÇÃO!

0

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. Assim como ele, tem o afterSave, beforeFind e afterFind. O after tem o efeito oposto do before.

É muito simples de usar, veja os códigos abaixo:

Sem o before:

$conditions = array(‘mes’=>$mes,’ano’=>$ano);
$this->CoorporativoLigacoes->find($conditions);


$this->CoorporativoLigacoes->save($this->data());

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.

Agora veja a solução usando o beforeSave

function beforeSave()
{
$conditions = array(‘mes’=>$mes,’ano’=>$ano);
$result = $this->CoorporativoLigacoes->find($conditions);
return $result;
}

function index()
{
$result = $this->beforeSave(); // este será executado primeiro
$this->CoorporativoLigacoes->save($this->data()); // Este só será executado depois do beforeSave
}

O mesmo uso deste você pode aplicar no afterSave, beforeFind, afterFind, etc.

Qualquer dúvida, só postar aqui.

PS: Nada de POG. ;)

Manual do CakePHP em Português

3

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://book.cakephp.org/pt

Bom estudo/consulta. ;)

Usando um Controller sem Model

0

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

Cakephp e seus acúmulos de cache. Problemas

0

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 questão no Cake. Tá rindo? Foi sinistro.

Estava precisando realizar as seguintes instruções dentro de um loop:

- Verificar se o dado existe no banco
- Se não existir, grava o dado no banco

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.

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.

Tentei usar o $cacheSources=false, getInsertId, execute, mas por incrível que pareça não funcionou.

Depois de algumas horas de tentativas resolvi usar uma espécie de POG. Eu não queria, mas pog sempre resolve.:)

Então eu coloquei a query – como diz um amigo aqui do trabalho – na mão. E lá fui eu “mysql_query(select ……….);”.

Ual! Foi impressionante, mas funcionou. Isso mesmo, com o POG.

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.

Bem, até agora eu não sei, se você souber, gostaria de saber. :)

Perdi algumas horas mas adquiri conhecimento, isso vale mais.

Uma vez um amigo aqui do trabalho consegui resolver o mesmo problema simplesmente com o cacheSources, mas hoje, não foi o caso.

Até a próxima!

Encontrei a solução deste problema e postei no blog, veja aqui.

 

Go to Top