View Single Post
  #1 (permalink)  
Old 12-27-2007, 04:04 AM
blurphp blurphp is offline
Junior Member
 
Join Date: Dec 2007
Posts: 9
Send a message via MSN to blurphp Send a message via Yahoo to blurphp
Default Smarty Implementation

Frist of all I am a newbie to zf. I have been out of the programming scene for a while.

I came across zf and decided to take a look at it.After reading the manual and some other sites I started playing around with it.

I guess first things first my directory structure
Code:
/application
    /config  --holds zf config file
    /controllers
    /models
    /Smarty  -- Smarty specific folders
         /cache
         /config
         /templates
         /templates_c
    /views
         /index
         /user
/library
    /Smarty  --  holds all smarty files
    /Zend  --  holds all zf files
.htaccess
index.php  --  bootstrapper file
I am using the zend veiw smarty layout that is in the manual. Zend Framework: Documentation

made a few adjustments to the Smarty.php script
PHP Code:
<?php
require_once 'Zend/View/Interface.php';
require_once 
'Smarty/Smarty.class.php';

class 
Zend_View_Smarty implements Zend_View_Interface
{
    
/**
     * Smarty object
     * @var Smarty
     */
    
protected $_smarty;
    
/**
     * Constructor
     *
     * @param string $tmplPath
     * @param array $extraParams
     * @return void
     */
    
public function __construct($tmplPath null$extraParams = array())
    {
        
$this->_smarty = new Smarty;
        if (
null !== $tmplPath)
        {
            
$this->setScriptPath($tmplPath);
        }
        foreach (
$extraParams as $key => $value)
        {
            
$this->_smarty->$key $value;
        }
    }
    
/**
     * Return the template engine object
     *
     * @return Smarty
     */
    
public function getEngine()
    {
        return 
$this->_smarty;
    }
    
/**
     *  Set the path to the templates
     *
     *  @param string $path The directory to set as the path.
     *  @return void
     */
      
public function setScriptPath($path)
      {
          if (
is_readable($path))
          {
              
//$this->_smarty->template_dir = $path;
              //Changed this so the path is to the directoy where the folders are
              
$this->_smarty->template_dir $path.'/templates';
              
// Add the following so we can have all paths available to Smarty
              
$this->_smarty->compile_dir $path.'/templates_c';
              
$this->_smarty->cache_dir $path.'/cache';
              
$this->_smarty->config_dir $path.'/config';
              return;
          }
          throw new 
Exception('Invalid path provided');
      }
      
/**
       *  Retrieve the current template directory
       *
       *  @return string
       */
      
public function getScriptPaths()
      {
          return 
$this->_smarty->template_dir;
      }
      
/**
       *  Alias for setScriptPath
       *  @param string $path
       *  @param string $prefix Unused
       *  @return void
       */
      
public function setBasePath($path$prefix 'Zend_View')
      {
          return 
$this->setScriptPath($path);
      }
      
/**
       *  Alias for setScriptPath
       *
       *  @param string $path
       *  @param string $prefix Unused
       *  @return void
       */
      
public function addBasePath($path$prefix 'Zend_View')
      {
          return 
$this->setScriptPath($path);
      }
      
/**
       *  Assign a variable to the template
       *  @param string $key The variable name.
       *  @param mixed $val The variable value.
       *  @return void
       */
      
public function __set($key$val)
      {
          
$this->_smarty->assign($key$val);
      }
      
/**
       *  Retrieve an assigned variable
       *
       *  @param string $key The variable name.
       *  @return mixed The variable value.
       */
      
public function __get($key)
      {
          return 
$this->_smarty->get_template_vars($key);
      }
      
/**
       *  Allows testing with empty() and isset() to work
       *
       *  @param string $key
       * * @return boolean
       * */
      
public function __isset($key)
      {
          return (
null !== $this->_smarty->get_template_vars($key));
      }
      
/**
       * Allows unset() on object properties to work
       *
       *  @param string $key
       *  @return void
       * */
      
public function __unset($key)
      {
          
$this->_smarty->clear_assign($key);
      }
      
/**
       *  Assign variables to the template
       *  Allows setting a specific key to the specified value, OR passing an array
       *  of key => value pairs to set en masse.
       *
       *  @see __set()
       *  @param string|array $spec The assignment strategy to use (key or array of key
       *  => value pairs)
       *  @param mixed $value (Optional) If assigning a named variable, use this
       *  as the value.
       *  @return void
       */
      
public function assign($spec$value null)
      {
          if (
is_array($spec))
          {
              
$this->_smarty->assign($spec);
              return;
          }
          
$this->_smarty->assign($spec$value);
      }
      
/**
       *  Clear all assigned variables
       *  Clears all variables assigned to Zend_View either via {@link assign()} or
       *  property overloading ({@link __get()}/{@link __set()}).
       *
       *  @return void
       */
      
public function clearVars()
      {
          
$this->_smarty->clear_all_assign();
      }
      
/**
       *  Processes a template and returns the output.
       *  @param string $name The template to process.
       *  @return string The output.
       */
      
public function render($name)
      {
          return 
$this->_smarty->fetch($name);
      }
}
My Bootstrapper looks like so:
PHP Code:
<?PHP

/*
*Error Reporting
*/
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors''On');
set_include_path(dirname(__FILE__) . '/library' PATH_SEPARATOR get_include_path());

/*
* Zend Loader
* Loads all the Zend classes the script uses
*/
require'Zend/loader.php';
/*
* Required Classes
* Class we need are accesssed through namespaces instead of direct files
* example Zend_Controller_Front will load /Zend/Controller/Front.php
*/
Zend_Loader::loadclass('Zend_Controller_Front');
Zend_Loader::loadclass('Zend_Config_Ini');
Zend_Loader::loadclass('Zend_Registry');
Zend_Loader::loadclass('Zend_Db');
Zend_Loader::loadclass('Zend_View_Smarty');

/*
* Load the config file
*/
$config = new Zend_Config_Ini('application/config/Config.ini''general');

/*
* Connect to database
*/
$db Zend_Db::factory($config->db);

/*
* Setup the controller
*/
$front Zend_Controller_Front::getInstance();
$front->setControllerDirectory('application/controllers');
$front->throwExceptions(true);

/*
* Run the page and display it  GO!!!
*/
$front->dispatch();
I saved the Smarty.php to Zend/View so I can load it using the Zend_Loader

My IndexController.php looks like
PHP Code:
<?PHP

class IndexController extends Zend_Controller_Action {

    function 
indexAction()
    {
        
//Logic Code goes here


        
$view = new Zend_View_Smarty();
        
$view->setScriptPath('application/Smarty');
        
$view->books 'Zend PHP 5 Certification Study Guide';
        
$view->author 'Davey Shafik and Ben Ramsey';
        
$rendered $view->render('bookinfo.tpl');


    }
}
What happens is everything works now to an extent but the .tpl files arenot outputing. I know I am overlooking something simple if someone could help me I would appreciate it.

If you need any more info just drop me a line.
Reply With Quote