Salve a tutti vorrei integrare smarty come motore di template in Zend Framework ma non riesco a configurare l'ambiente.
Sto seguendo una guida ed ho fatto i seguenti cambiamenti :
- Nel file di bootstrap (index.php)
// Sostituisce view renderer con Smarty
$vr = new Zend_Controller_Action_Helper_ViewRenderer();
$vr->setView(new Templater());
$vr->setViewSuffix('tpl');
Zend_Controller_Action_HelperBroker::addHelper($vr);
che dovrebbe sostituire Smarty al pugin ViewRenderer
- Mi sono creato una classe Templater che contiene il seguente codice :
require_once 'Zend/View/Abstract.php';
class Templater extends Zend_View_Abstract
{
protected $_path;
protected $_engine;
// Viene chiamato dal file index.php e istanzia Smarty
public function __construct()
{
$config = Zend_Registry::get('config');
require_once('Smarty/Smarty.class.php');
$this->_engine = new Smarty();
$this->_engine->template_dir = $config->paths->templates;
$this->_engine->compile_dir = $config->paths->templates_c;
$this->_engine->plugins_dir = $config->plugin->dir;
}
public function getEngine()
{
return $this->_engine;
}
public function __set($key, $val)
{
$this->_engine->assign($key, $val);
}
public function __get($key)
{
return $this->_engine->get_template_vars($key);
}
public function __isset($key)
{
return $this->_engine->get_template_vars($key) !== null;
}
public function __unset($key)
{
$this->_engine->clear_assign($key);
}
public function assign($spec, $value = null)
{
if (is_array($spec)) {
$this->_engine->assign($spec);
return;
}
$this->_engine->assign($spec, $value);
}
public function clearVars()
{
$this->_engine->clear_all_assign();
}
public function render($name)
{
return $this->_engine->fetch(strtolower($name));
}
public function _run()
{ }
}
e costruttore se vedete bene si occupa di istanziare Smarty.
- Ho creato una classe genitore per tutti i controller chiamata CustomControllerAction
class CustomControllerAction extends Zend_Controller_Action {
public $db;
public function init(){
$this->db = Zend_Registry::get('db');
echo "Stampa del costruttore CustomController";
}
}
- I miei controller ereditano da quest'ultima classe ed estendono mediante i soliti metodi publici.
Ad esempio il controller di default è così scritto :
require_once 'CustomControllerAction.php';
class IndexController extends CustomControllerAction
{
public function indexAction(){
echo "Prova";
}
public function displayAction(){
echo 'Stampa della funzione displayAction()';
}
public function noRouteAction(){
echo "Attenzione !!!";
}
}
il problema è che la guida dice che non ho bisogno di chiamare il metodo display della classe Smarty per poter renderizzare il template, però a me non funziona.
Qualcuno di voi potrebbe darmi una mano????