Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Estou tentando enviar um e-mail a partir de um arquivo HTML, porém não consigo passar os dados das variáveis PHP para o arquivo HTML.
Restado o html
$nome = 'Casssiano'; // Quero passar este valor para o HTML
$body = file_get_contents('../emails/email-ativacao-senha.html');
No html, incluí algumas variáveis (não sei se é este o nome) para uso em templates.
Olá {nome}
Já pesquisei bastante, até encontrei classes, mas no momento quero realmente aprender como funciona.
Se alguém puder ajudar, desde já agradeço.
Você pode listar as variáveis, já com seus respectivos valores, num array associativo. Depois substituir com alguma função.
<?php
$dados = array(
'nome' => 'Cassiano',
'site' => 'http://google.com/',
);
//$corpo = file_get_contents('../emails/email-ativacao-senha.html');
$corpo = 'Oi {nome}, você ja visitou o {site} hoje?';
$chaves = array_map( function( $var ) { return '{'.$var.'}'; } , array_keys( $dados ) );
$corpo = str_replace( $chaves , array_values( $dados ) , $corpo );
echo $corpo;
//retorno: Oi Cassiano, você ja visitou o http://google.com/ hoje?
Ou pode usar as famosas expressões regulares para fazer algo mais automatizado:
<?php
$GLOBALS['nome'] = 'Cassiano';
$GLOBALS['site'] = 'http://google.com/';
//$corpo = file_get_contents('../emails/email-ativacao-senha.html');
function varChanger ( $var ) {
return $GLOBALS[ trim( $var , '{}' ) ];
}
$corpo = 'Oi {nome}, você ja visitou o {site} hoje?';
$corpo = preg_replace( '/(\{[a-zA-Z_]+\})/e' , 'varChanger(\'\\1\')' , $corpo );
echo $corpo;
Entre as duas opções, a primeira é bem melhor, porém a implementação de ambas está bastante simples. A segunda opção pode oferecer resultados diferentes com poucas mudanças no código.
Com classes isso iria ficar supimpa :thumbsup:
Obrigado colegas.
Irei estudar melhor as sugestões passadas.
Se o arquivo for HTML não tem como...
Você precisa de um arquivo com extensão .php ou .phtml.
Aí, ao invés de usar file_get_contents, simplesmente dê um include...