My last projects are all build with Zend Framework and almost all of my previous projects were created with custom framework using Smarty. I wanted to implement Smarty in Zend Framework and I search through the web to find proper resolution for my problem. I found this article and another one inspired by the first. I tested both approaches but they were not what I was looking for. Inspired by both articles I created my own Smarty – Zend framework implementation.
First creating custom Controller:
<?php class Base_Controller extends Zend_Controller_Action { /** * DISABLE DEFAULT ZEND FRAMEWORK VIEW */ public function init() { $this->_helper->viewRenderer->setNoRender(true); } /** * LOADING SMARTY ON DEMAND * */ public static function LoadSmarty() { include ('smarty/Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = template dir ; $smarty->compile_dir = compile dir; $smarty->config_dir = config dir $smarty->cache_dir = cache dir; $smarty->plugins_dir = and plugins ; /** * SMARTY CONFIGURATION * */ $smarty->debugging = false; $smarty->force_compile = true; $smarty->compile_check = true; /** * SMARTY PLUGINS * */ //include various smarty plugins Zend_Registry::set('smarty', $smarty); } } ?>
This is example of the custom Base Controller, if we want to include Smarty in particular Controller we extend Base Controller
<?php include ('kernel/Base_Controller.php'); class IndexController extends Base_Controller { public function indexAction() { $this->IncludeSmarty(); $smarty = Zend_Registry::get('smarty'); $smarty->assign('title', 'Test Page index'); /** DEFINE PAGE TEMPLATES */ $smarty->display('includes/header.tpl'); $smarty->display('demo.tpl'); $smarty->display('includes/footer.tpl'); } /** * FUNCTION FOR LOADING SMARTY * * @return smarty object */ public static function IncludeSmarty() { Base_Controller::LoadSmarty(); } }
If we are building some pages, that doesn’t require Smarty or we want it to use Zend_View component the only difference is that the custom controller extends the default Zend_Controller
<?php include ('kernel/Base_Controller.php'); class IndexController extends Zend_Controller_Action // ALL LOGIC HERE
With this approach Smarty will be used only when it is needed and.If we completely skip Zend_View in our custom framework we can avoid the frustrating for me default Zend Framework View directory. structure.
PHP Tutorials
April 25, 2009 at 9:56 pm
A fantastic read….very literate and informative. Many thanks….where is your RSS button ?