Instalação Básica

Instale os arquivos da biblioteca do Smarty que estão no diretório /libs/ da distribuição. Estes são os arquivos PHP que você NÃO PRECISA editar. Eles são comuns a todas as aplicações e eles só são atualizados quando você atualiza para uma nova versão do Smarty.

Exemplo 2-1. Arquivos da biblioteca do Smarty

Smarty.class.php Smarty_Compiler.class.php Config_File.class.php debug.tpl
/core/*.php (todos eles)
/plugins/*.php (todos eles)

O Smarty utiliza uma constante do PHP chamada SMARTY_DIR que é o caminho para diretório da biblioteca do Smarty. Basicamente, se sua aplicação pode encontrar o arquivo Smarty.class.php, você não precisa definir a constante SMARTY_DIR, o Smarty irá localizá-la sozinho. Sendo assim, se o arquivo Smarty.class.php não está em seu include_path, ou você não fornece um caminho absoluto para ele em sua aplicação, então você deve definir a constante SMARTY_DIR manualmente. A constante SMARTY_DIR deve conter uma barra de seguimento.

Aqui está um exemplo de como você cria uma instância do Smarty em seus scripts PHP:

Exemplo 2-2. Cria uma instância Smarty do Smarty

require('Smarty.class.php');
$smarty = new Smarty;

Tente rodar o script acima. Se você obtiver um erro dizendo que o arquivo Smarty.class.php não pôde ser encontrado, você tem que fazer uma das coisas a seguir:

Exemplo 2-3. Fornecer um caminho absoluto para o arquivo da biblioteca

require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;

Exemplo 2-4. Adicionar o diretório da biblioteca para o include_path do PHP

// Edite o seu arquivo php.ini, adicione o diretório da biblioteca do Smarty
// para o include_path e reinicie o servidor web.
// Então o código a seguir funcionaria:
require('Smarty.class.php');
$smarty = new Smarty;

Exemplo 2-5. Defina a constante SMARTY_DIR manualmente

define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;

Agora que os arquivos da biblioteca estão no lugar, chegou a hora de configurar os diretórios do Smarty para a sua aplicação. O Smarty requer quatro diretórios que são (por definição) chamados de templates, templates_c, configs e cache. Cada um destes são definíveis pelas propriedades da classe do Smarty $template_dir, $compile_dir, $config_dir, e $cache_dir respectivamente. É altamente recomendado que você configure um grupo separado destes diretórios para cada aplicação que utilizará o Smarty.

Certifique-se que você sabe a localização do 'document root' do seu servidor web. Em nosso exemplo, o 'document root' é "/web/www.mydomain.com/docs/". Os diretórios do Smarty só são acessados pela biblioteca do Smarty e nunca acessados diretamente pelo navegador. Então para evitar qualquer preocupação com segurança, é recomendado colocar estes diretórios fora do document root.

Para o nosso exemplo de instalação, nós estaremos configurando o ambiente do Smarty para uma aplicação de livro de visitas. Nós escolhemos uma aplicação só para o propósito de uma convenção de nomeação de diretório. Você pode usar o mesmo ambiente para qualquer aplicação, apenas substitua "guestbook" com o nome de sua aplicação. Nós colocaremos nossos diretórios do Smarty dentro de "/web/www.mydomain.com/smarty/guestbook/".

Você precisará pelo menos de um arquivo dentro de seu 'document root', e que seja acessado pelo navegador. Nós chamamos nosso script de "index.php", e o colocamos em um subdiretório dentro do 'document root' chamado "/guestbook/".

Nota Técnica: É conveniente configurar o servidor de forma que "index.php" possa ser identificado como o índice de diretório padrão, desta forma se você acessa "http://www.mydomain.com/guestbook/", o script index.php será executado sem "index.php" na URL. No Apache você pode definir isto adicionando "index.php" no final de sua configuração DirectoryIndex (separe cada entrada com um espaço.)

Vamos dar uma olhada na estrutura de arquivos até agora:

Exemplo 2-6. Exemplo de estrutura de arquivo

/usr/local/lib/php/Smarty/Smarty.class.php
/usr/local/lib/php/Smarty/Smarty_Compiler.class.php
/usr/local/lib/php/Smarty/Config_File.class.php
/usr/local/lib/php/Smarty/debug.tpl
/usr/local/lib/php/Smarty/core/*.php
/usr/local/lib/php/Smarty/plugins/*.php
/web/www.mydomain.com/smarty/guestbook/templates/
/web/www.mydomain.com/smarty/guestbook/templates_c/
/web/www.mydomain.com/smarty/guestbook/configs/
/web/www.mydomain.com/smarty/guestbook/cache/
/web/www.mydomain.com/docs/guestbook/index.php

O Smarty precisará escrever para o $compile_dir e $cache_dir, então garanta que o usuário do servidor web possa escrever neles. Este é geralmente o usuário "nobody" e o grupo "nobody" (ninguém). Para SO com X usuários, o usuário padrão é "www" e o grupo "www". Se você está usando Apache, você pode olhar em seu arquivo httpd.conf (normalmente em "/usr/local/apache/conf/") para ver qual o usuário e grupo estão sendo usados.

Exemplo 2-7. Configurando permissões de arquivos

chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/templates_c/
chmod 770 /web/www.mydomain.com/smarty/guestbook/templates_c/
chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/cache/
chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/

Nota Técnica: chmod 770 será a segurança correta suficientemente restrita, só permite ao usuário "nobody" e o grupo "nobody" acesso de leitura/escrita aos diretórios. Se você gostaria de abrir o acesso de leitura para qualquer um (na maioria das vezes para sua própria conveniência de querer ver estes arquivos), você pode usar o 775 ao invés do 770.

Nós precisamos criar o arquivo index.tpl que o Smarty vai ler. Ele estará localizado em seu $template_dir.

Exemplo 2-8. Editando /web/www.mydomain.com/smarty/guestbook/templates/index.tpl

{* Smarty *}
Olá, {$nome}!

Nota Técnica: {* Smarty *} é um comentário de template. Ele não é exigido, mas é uma prática boa iniciar todos os seus arquivos de template com este com este comentário. Isto faz com que o arquivo seja reconhecido sem levar em consideração a sua extensão. Por exemplo, editores de texto poderiam reconhecer o arquivo e habilitar coloração de sintaxe especial.

Agora vamos editar index.php. Nós criaremos uma instância do Smarty, atribuiremos valores às variáveis de template e mostraremos o arquivo index.tpl. Em nosso ambiente de exemplo, "/usr/local/lib/php/Smarty" é o nosso include_path. Certifique-se de ter feito o mesmo, ou use caminhos absolutos.

Exemplo 2-9. Editando /web/www.mydomain.com/docs/guestbook/index.php

// carregar a biblioteca do Smarty require('Smarty.class.php');
$smarty = new Smarty;
$smarty->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';
$smarty->assign('nome','Thomas');
$smarty->display('index.tpl');

Nota Técnica: Em nosso exemplo, nós estamos configurando caminhos absolutos para todos os diretórios do Smarty. Se '/web/www.mydomain.com/smarty/guestbook/' está dentro de seu include_path do PHP, então estas configurações não são necessárias. Entretanto, isto é mais eficiente e (a experiência mostra) menos tendência a erros em relação à definição de caminhos absolutos. Isto garante que o Smarty está obtendo os arquivos dos diretórios que você deseja.

Agora carregue o arquivo index.php em seu navegador. Você veria "Olá, Thomas!"

Você completou a configuração básica para o Smarty!