[Resolvido] Templates
Ola pessoal!
Estou estudando iniciar o uso de templates para facilitar a minha vida na hora de atualizar meus projetos e sistemas.
Criei o topico com o intuito de coletar experiencias e dicas de por onde comecar a estudar, exemplos de classes e etc.
Gostaria de deixar o comeco do meu trabalho, bem simples, usado pra personalizar e-mails enviados via cron, para analise e criticas.
Classe [ html.class.php ]
<?php
##################################
IPis - ©2000-2011 #
http://www.ipis.com.br #
info@ipis.com.br #
Script by Fernando Lima #
##################################
#
Baseado na classe Template.class versao 1.9
de Rael G.C. (rael.gc@gmail.com)
http://www.raelcunha.com/template.php
#
Class _HTML {
// VARIAVEIS
Private $_Expressao = '/{([a-zA-Z0-9,_$]*)?}/';
Private $_Variaveis = Array();
Private $_Conteudos = Array();
Private $_Arquivos = Array();
/*************************
CARGA DE ARQUIVO HTML
*************************/
Public Function Carregar($URL = '', $Nome = '')
{
If (is_file($URL) && is_readable($URL))
{
// REGISTRO DO ARQUIVO
$i = count($this->_Arquivos) + 1;
$this->_Arquivos[$i] = $URL;
// GRAVACAO DO CONTEUDO
$Nome = empty($Nome) ? basename($URL) : $Nome;
$Conteudo = preg_replace('/<!---.*?--->/smi', '', file_get_contents($URL)); // Carrega o html (removendo comentarios)
$i = count($this->_Conteudos) + 1;
$this->_Conteudos[$i] = Array('Nome' => $Nome, 'Conteudo' => $Conteudo);
}
}
/*************
VARIAVEIS
*************/
Public Function Variavel_Adicionar($Indice = '', $Valor = '')
{ $this->_Variaveis[$Indice] = $Valor; }
/******************
SAIDA/EXIBICAO
******************/
Public Function Exibir($Retorno = False)
{
$HTML = '';
$RT = '';
// Concatena os conteudos
Foreach($this->_Conteudos as $Arquivo)
{ $HTML .= $Arquivo['Conteudo']; }
// Identifica as variaveis no conteudo
$iVariaveis = preg_match_all($this->_Expressao, $HTML, $aVariaveis);
$aVariaveis = $aVariaveis[1];Foreach($aVariaveis as $Nome)
{ $TMP = isSet($this->_Variaveis[$Nome]) ? $this->_Variaveis[$Nome] : '[<span style="color:red">'.$Nome.'</span>]';
$Inicio = strpos($HTML, '{');
$Tamanho = strlen('{'.$Nome.'}');
$HTML = substr_replace($HTML, $TMP, $Inicio, $Tamanho);
}
If ($Retorno === False)
{ Exit($HTML); } Else { Return $HTML; }
}
/*********
RESET
*********/
Public Function Resetar()
{
$this->_Variaveis = Array();
$this->_Arquivos = Array();
$this->_Conteudos = Array();
}
/*********
ERROS
*********/
Public Function Erro($Dados = Array())
{
}
/*********
DEBUG
*********/
Public Function Debug()
{
$RT = Array();
$RT['Arquivos'] = $this->_Arquivos;
$RT['Conteudos'] = $this->_Conteudos;
$RT['Variaveis'] = $this->_Variaveis;
Return $RT;
}
// FIM DA CLASSE
}
?>
Template de Cobrança [ cobranca.html ]
<HTML>
<HEAD>
<title>{SIS_Titulo}</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="content-language" content="pt-br">
<base href="{SIS_Base}">
<meta http-equiv="content-language" content="pt-br">
<link rel="stylesheet" type="text/css" href="{SIS_CSS_Arquivo}">
<style type="text/css">
{SIS_CSS_String}
</style>
</HEAD>
<BODY class="Body">
<table class="Pagina" cellpadding="0" cellspacing="0">
<!-- TOPO -->
<tr>
<td class="Pagina_Topo">
<table class="Topo" cellpadding="0" cellspacing="0">
<tr>
<td class="Topo_Logo">
<img src="{EMAIL_Logo}">
</td>
<td class="Topo_Conteudo">
{EMAIL_Cabecalho}
</td>
</tr>
</table>
</td>
</tr>
<!-- CORPO -->
<tr>
<td class="Pagina_Corpo">
<table class="Corpo" cellpadding="10" cellspacing="0">
<tr>
<td class="Corpo_Conteudo">
<b>Olá {Cliente},</b>
<br><br><div class="Paragrafo">Entramos em contato para notificar o vencimento próximo da cobrança gerada em seu nome, conforme descrição abaixo:</div>
<br><br><span class="Corpo_Titulo">Dados da Cobrança:</span>
<hr class="Corpo_HR">
<br>Cobrança: COB{Codigo}
<br>Vencimento: <b>{Vencimento}</b>
<br>Referência: {Venda_Referencia}
<br>Parcela: {Parcela}/{Parcelas}
<br>Valor: <b>R$ {Valor}</b>
<br><br><br><span class="Corpo_Titulo">Pagamento:</span>
<hr class="Corpo_HR">
<br><div class="Paragrafo">Você pode pagar esta cobrança online (inclusive com cartões de crédito){Boleto_String} ou, caso já tenha efetuado o pagamento via depósito, TEF ou boleto bancário, informar o pagamento e enviar o comprovante para nós. Clique na opção desejada:</div>
<br><div style="text-align:center;"><a href="{SIS_Base}pagar.php?ID={Codigo}" target="_blank"><img src="midia/img/bt_pagar.png" alt="Pagar Online" title="Pagar online agora esta cobrança"></a> {Boleto_Link} <a href="{SIS_Base}confirmar.php?ID={Codigo}" target="_blank" alt="Confirmar o Pagamento" title="Confirmar/informar o pagamento via depósito/TEF/boleto"><img src="midia/img/bt_confirmar.png"></a></div>
{Banco_String}
<br><br><span class="Corpo_Titulo">Dúvidas?</span>
<hr class="Corpo_HR">
<br><div class="Paragrafo"><i>Caso esta cobrança já tenha sido quitada, favor desconsiderar este e-mail.</i> Para qualquer dúvida a respeito desta cobrança favor entrar em contato conosco.</div>
<div class="Paragrafo"><b>Agradecemos mais uma vez a preferência.</b></div>
<br><br><br><div style="text-align:center;">Atenciosamente,<br><br><br>{SIS_Cliente}<br>{SIS_Cliente_Email}<br>{SIS_Cliente_Tel}</div>
</td>
</tr>
</table>
</td>
</tr>
<!-- RODAPE -->
<tr>
<td class="Pagina_Rodape">
<table class="Rodape" cellpadding="5" cellspacing="0">
<tr>
<td class="Rodape_Conteudo">{EMAIL_Rodape}</td>
</tr>
</table>
</td>
</tr>
</table>
</BODY>
</HTML>
Como eu disse a classe que desenvolvi, baseada numa que ta nos creditos do arquivo, e simples. Ela basicamente substitui todas as keys entre chaves no arquivo do template, ex: {Nome_Cliente}, pelas variaveis com o mesmo nome que adiciono a class pelo metodo Variavel_Adicionar().
Eu quero adicionar blocos de codigo, poder usar arrays, if, else, no template. Por isso preciso de dicas pra estruturas, exemplos e material pra estudo.
Desde ja, agradeco a todos.
Abraço turma.
--------------
EDIÇÃO:
--------------
Nao sou muito intimo das classes, to aprendedo ainda e gostaria de aproveitar e tirar uma duvida:
Como faz pra quando eu instanciar uma classe ja setar valores em algumas variaveis da mesma?
Tipo nessa html ja setar um arquivo base e carrega-lo.
E gostaria tambem de expor que nao quero copiar o codigo do cara, quero aprender a fazer, por isso o post.
Discussão (5)
Carregando comentários...