Arquitetura de Software com CodeIgniter – Integrando o Smarty
Neste terceiro artigo sobre uma proposta de arquitetura de software utilizando CodeIgniter e alguns outros frameworks, mostrarei na prática como fazer a integração do framework de templates Smarty com o CodeIgniter. Após fazer o download e instalar a última versão do framework CodeIgniter, é hora de fazer o download da última versão estável do Smarty, que pode ser encontrada no site oficial do framework. Após efetuar o download, basta descompactar o pacote baixado e copiar a pasta libs para a pasta application/libraries da instalação do CodeIgniter. Então é só renomear a pasta libs para smarty_libs, apenas para melhorar a organização dos diretórios.
Na arquitetura proposta, o Smarty estará disponível a partir da variável smartyview dos Controllers, assim é necessária a criação de arquivos para localizar e disponibilizar o Smarty como uma biblioteca do CodeIgniter. O primeiro arquivo a ser criado estará localizado na pasta application/libraries e se chamará smartyview.php. Ele terá o seguinte conteúdo:
<?php
if (!defined('BASEPATH')) die('Acesso direto ao script bloqueado.');
require_once BASEPATH . 'application/libraries/smarty_libs/Smarty.class.php';
/**
* Classe que extende smarty para definir algumas configurações básicas de inicialização
*
* @author Fernando
* @package libraries
*/
class SmartyView extends Smarty
{
/**
* Construtor da classe, define a pasta de compilação e a pasta de templates
*
* @access public
* @author Fernando
* @version 1.0
*/
public function SmartyView()
{
$this->compile_dir = BASEPATH . "application/views/templates_c";
$this->template_dir = BASEPATH . "application/views";
log_message('debug', 'Classe Smarty Inicializada');
}
}
?>
Esta classe que herda de Smarty, é utilizada apenas a nível de inicialização das variáveis necessárias pelo framework. Ela define a pasta onde os templates compilados serão salvos, a pasta onde os templates (arquivos de View) estão localizados e grava no log do CodeIgniter uma informação de que a classe Smarty foi inicializada. É necessária a criação de uma pasta chamada templates_c dentro de application/views, com permissões 0755, ou 0777.
O segundo arquivo a ser criado é o arquivo de configurações para gerar uma instância da classe e marcá-la como inicializada. O arquivo é o smartyview.php localizado dentro de application/config, o código é o seguinte:
<?php
if (!defined('BASEPATH')) die('Acesso direto ao script bloqueado.');
if (!class_exists('SmartyView'))
{
require_once APPPATH . 'libraries/smartyview' . EXT;
}
$obj =& get_instance();
$obj->smartyview = new SmartyView();
$obj->ci_is_loaded[] = 'smartyview';
?>
Ele inclui a classe SmartyView, criada anteriormente, pega a instância do objeto atual do CodeIgniter (Controller), armazena uma instância da classe SmartyView na variável smartyview e a marca como instanciada nas variáveis de controle do CodeIgniter. Estes são os passos necessários para que o framework Smarty funcione no CodeIgniter.
Agora para testar se tudo está funcionando, basta ir no controller welcome.php localizado em application/controllers, e colocar o seguinte código nele:
<?php
class Welcome extends Controller
{
public function Welcome()
{
parent::Controller();
$this->load->library('smartyview');
}
public function index()
{
$this->smartyview->assign('mensagem', 'Mensagem');
$this->smartyview->display('index.tpl');
}
}
?>
Agora é necessário criar o arquivo application/views/index.tpl e colocar o seguinte conteúdo nele:
<html>
<head>
<title>Arquitetura CI</title>
</head>
<body>
<h1>{$mensagem}</h1>
</body>
</html>
Se tudo der certo, basta acessar agora a URL definida na instalação do CodeIgniter, por exemplo http://localhost/codeigniter, e será exibida a mensagem “Mensagem”. Isto indica que o Smarty está funcionando perfeitamente, encerrando assim este artigo. No próximo artigo será feita a integração com o Doctrine, seguindo pela implementação da camada Facade e por algumas mudanças na nomenclatura dos Controllers. Até a próxima.
Anonimo
Postado em 22/08/2009 às 22:42Simplesmente sensacional! Agradeço-te, Fernando, por ter postado esse artigo. Era exatamente o que eu estava procurando.
Parabéns!
P.S: Tem como integrar o Smarty com o ZEND e tb o CakePHP?