Zend Framework e Smarty (Introdução e Configuração)

O PHP como todos sabem é uma linguagem poderosa, capaz de fazer sites imagináveis, porém muitas vezes por solicitação do cliente é necessário alterar algum script da página, nisso leva tempo, pois tem...

Publicado em: 28 de setembro de 2008  |  Leituras: 9.767  |  Canal: PHP  |  Autor: Marcos Antonio Gomes
O PHP como todos sabem é uma linguagem poderosa, capaz de fazer sites imagináveis, porém muitas vezes por solicitação do cliente é necessário alterar algum script da página, nisso leva tempo, pois tem sempre que ficar tomando cuidado com o layout do site.

Outra coisa é o desenvolvimento de um site através de uma equipe, programadores, designer...
Sempre tem que esperar um para o outro fazer a sua parte, exemplo o programador quer inserir o seu script mais não pode porque o css da página ainda não esta feita e assim vai. Isso não aconteceria se tivesse usando o Zend Framework e o Smarty.

O Zend Framework usa a arquitetura Model-View Controller (MVC). Isto é usado para separar as diferentes partes de sua aplicação para tornar o desenvolvimento e manutenção mais fácil.

O Smarty é um sistema de templates para PHP, Mais especificamente, ele fornece uma maneira fácil de conrolar a  separação da aplicação lógica e o conteúdo de sua apresentação. Isto é melhor descrito em uma situação onde o programador da aplicação e o designer do template executam diferentes funções, ou na maiores dos casos não são a mesma pessoa.

Significado da sigla MVC


Model A parte de modelo de uma aplicação é a parte que se preocupa com os dados específicos a serem mostrados. No código de exemplo acima, é o conceito de “news”. Dessa forma, model é geralmente relacionado com a lógica de negócios de uma aplicação e administra o carregamento e o salvamento de dados em um banco de dados.

View A view consiste em uma pequena parte da aplicação que é responsável em mostrar a informação ao usuário. Normalmente, é o HTML.Controller O controller amarra o view e o model para garantir que as informaçõescorretas sejam mostradas na página. Um outra coisa que o Zend Framework também faz é gerar URL amigável.

Exemplo:
http://www.exemplo.com.br/pagina.php?id=54?cod=655

Com o Zend Framework
http://www.exemplo.com.br/id/54/cod/655

Apesar de que o Zend Framework não designa uma estrutura de diretório, usaremos o padrão que é da seguinte maneira.


Como pode se visto, criamos os diretórios separados para os arquivos do model, view e controller dentro do diretório application. Dentro do diretório common ficará nos arquivos de Imagens, CSS e JavaScrip. No diretório lib ficarão nossas bibliotecas.

Baixe o Zend Framework pelo site http://framework.zend.com/download

Ao baixa, descompacte e copie a pasta Zend que esta dentro do diretório ‘library’ para dentro do nosso diretório ‘lib’.

Baixe o Smarty pelo site http://www.smarty.net/download.php

Dentro do diretório ‘library’ crie uma pasta chamada Smarty, descompacte o arquivo baixado, copie todos os arquivos da pasta ‘libs’ para dentro da pasta Smarty criada.

Veja como esta os nossos diretórios.


Podemos reparar que dentro da pasta lib possui um arquivo chamado Smarty.php, esse arquivo estaremos criando para integrar o Zend Framework com o Smarty.

Arquivo Smarty.php
<?php

//Requer a class do Smarty
require_once 'Smarty/Smarty.class.php';

class View_Smarty extends Zend_View_Abstract
{
    private $_smarty;

    public function __construct($data = array())
    {
        parent::__construct($data);

        $this->_smarty = new Smarty();

        $this->_smarty->debugging = false;
        $this->_smarty->force_compile = true;
        $this->_smarty->compile_check = true;
        $this->_smarty->caching = false;
        $this->_smarty->cache_lifetime = -1;

        $path = getcwd();
        $path = str_replace("\", "/", $path);
        $path .= "/";
        $this->_smarty->template_dir = $path.'application/views/';
        $this->_smarty->compile_dir = $path.'application/views_c/';
    }

    /**
     * O método run é o único que precisa
     * ser implementado em qualquer
     * subclasse de Zend_View_Abstract.
     * É chamado automaticamente de
     * dentro do método render.
     * A implementação abaixo,
     * publicada por Ralf Eggert no
     * site da Zend, usa o método display
     * do Smarty para gerar e imprimir o
     * template.
     * @return void
     */
    protected function _run($template='index.tpl')
    {
        $this->_smarty->display($template);
    }

    /**
     * O método assign do Smarty funciona
     * de maneira similar ao de Zend_View.
     * A grande diferença é que os valores
     * são associados para o objeto Smarty
     * e não para o array $this->_vars de
     * Zend_View_Abstract.
     * @return void
     */
    public function assign($spec,$value = NULL)
    {
        if (is_string($spec))
        {
            $this->_smarty->assign($spec, $value);
        }
        elseif (is_array($spec))
        {
            foreach ($spec as $key => $value)
            {
                $this->_smarty->assign($key, $value);
            }
        }
        else
        {
            throw new Zend_View_Exception('assign() expects a string or array, got '.gettype($var));
        }
    }

    /**
     * O método escape do Smarty
     * trabalha tanto para strings
     * quanto para arrays de valores
     * e também usa o método escape
     * de Zend_View_Abstract. A
     * vantagem disso é que você não
     * tem de tomar cuidado para cada
     * valor de um array ser tratado
     * apropriadamente.
     * @return string
     */
    public function escape($var)
    {
        if (is_string($var))
        {
            return parent::escape($var);
        }
        elseif (is_array($var))
        {
            foreach ($var as $key => $val)
            {
                $var[$key] = $this->escape($val);
            }

            return $var;
        }
        else
        {
            return $var;
        }
    }

    /**
     * @return void
     */
    public function display($name)
    {
        $this->_smarty->display($this->_smarty->template_dir.$name);
        exit;
    }

}
?>

Espero que tenha gostado, pois esse tutorial será essencial para continuarmos a conhecer mais sobre essa duas aplicações.

Abaixo tem o esqueleto que acabamos de montar disponível para download.

Resposta em até 24 horas! (grátis)Dúvidas?

Compartilhe
Share orkut
delicious
Gostei

Nossa url encurtada:
Autor da matéria
Marcos Antonio Gomes

Sou Professor, Web Design, Programador Web, Analista em Linux e desenvolver do Gnomux Linux.

Dicas do canal