Welcome, Guest. Register Now!
   
Mark Forums Read Mark Forums Read Mark Forums Read


Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 05-26-2008, 09:25 AM
Junior Member
 
Join Date: May 2008
Posts: 3
Default smarty and zend form

I would like to use smarty and zend form in my application but I got this message Warning: ViewHelper decorator cannot render without a registered view object in C:\Program Files\Apache Group\Apache2\htdocs\smarty\library\Zend\Form.php on line 2167 and the form wasn't appeared. Somebody help me Please !

My directory structural is
/www
/application
controllers
models
templates
templates_c
/library
/Zend
/Smarty
.htaccess
index.php -- bootstrapper file

index.php

PHP Code:
date_default_timezone_set('Europe/Budapest');
error_reporting(E_ALL|E_STRICT);
ini_set('include_path','c:/Program Files/Apache Group/Apache2/htdocs/smarty/library;c:/Program Files/Apache Group/Apache2/htdocs/smarty');
require(
'Zend/Loader.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_Form');
$front Zend_Controller_Front::getInstance();
//$front->setControllerDirectory('C:/Program Files/Apache Group/Apache2/htdocs/smarty/application/controllers');
$front->setControllerDirectory('application/controllers');
$front->setParam('noViewRenderer'true);
$front->throwExceptions(true);
$front->dispatch(); 
indexController.php

PHP Code:
class IndexController extends Zend_Controller_Action
{
    function 
indexAction()
    {
        
        require_once(
'smarty.php');
        
$view = new Zend_View_Smarty();
        
$view->setScriptPath('application');
        
$form = new Zend_Form;
        
$form->setAction('/public/form')
                  ->
setMethod('post');
         
$form->setAttrib('id''login');
         
$form->addElement('text''username');
         
//$view->form('form',$form);
         
$view->form $form;
        print 
$view->render('index.tpl');
        
    }
    

smarty.php

PHP Code:
require_once 'Zend/View/Interface.php';
require_once 
'smarty/libs/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;
        
$this->_smarty->debugging=true;
        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);
    }
    
//--------------------------------------------------------------------------

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 06-03-2008, 06:07 PM
Junior Member
 
Join Date: Jun 2008
Posts: 2
Default

I have the same trouble. if you find a fix post it plz.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 06-03-2008, 06:15 PM
Junior Member
 
Join Date: Jun 2008
Posts: 2
Default

hum I think I find a small fix. but Iam not sure if its good or not but it working for me.

change class Zend_View_Smarty implements Zend_View_Interface

by class Zend_View_Smarty extends Zend_View_Abstract {

and add

protected function _run()
{
include func_get_arg(0);
}

to your Zend_View_Smarty class.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #4 (permalink)  
Old 06-16-2008, 05:30 AM
Junior Member
 
Join Date: May 2008
Posts: 3
Default

I did it:

In the index.php I did that:

PHP Code:
$viewHelper = new Zend_Controller_Action_Helper_ViewRenderer($view);
$viewHelper->setViewSuffix('tpl');
Zend_Controller_Action_HelperBroker::addHelper($viewHelper);


// register the view object ! 
$registry Zend_Registry::getInstance();
$registry->set('view'$view); 
In the controller you can call the view object:

PHP Code:
$view Zend_Registry::get('view');           
$view->render('index.tpl'); 
The form work perfect
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #5 (permalink)  
Old 06-18-2008, 09:42 AM
aap aap is offline
Junior Member
 
Join Date: Jun 2008
Posts: 1
Default

Hello,

I've been trying to get a Zend_Form working with Smarty too. I followed your suggestion and added a viewhelper to the view object.
PHP Code:
/* Initiate Smarty */
$view = new Zend_View_Smarty(dirname(__FILE__).'/views'$smarty_config);

/* Setup a helper for Zend_Form and such */
$viewHelper = new Zend_Controller_Action_Helper_ViewRenderer($view);
$viewHelper -> setViewSuffix('html');
Zend_Controller_Action_HelperBroker::addHelper($viewHelper); 

/* Register Smarty */
Zend_Registry::set('smarty'$view); 
Unfortunately, PHP comes up with this:
Code:
Fatal error: Call to undefined method Zend_View_Smarty::formText() in /library/Zend/Form/Decorator/ViewHelper.php on line 247
I've been trying several things to fix it, but I haven't found a solution yet. Does anyone have a suggestion?

Thanks in advance.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #6 (permalink)  
Old 07-01-2008, 12:49 PM
Junior Member
 
Join Date: May 2008
Posts: 3
Default

Did you load the 'Zend_Form' ( Zend_Loader::loadclass('Zend_Form'); ) ?
I think it doesnt find the form object. The message say this
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #7 (permalink)  
Old 07-28-2008, 02:33 PM
tru tru is offline
Junior Member
 
Join Date: Jul 2008
Posts: 10
Default

I've got same problem, but my Smarty is integrated a different way that yours.
Index.php
PHP Code:
include 'smarty/Smarty.class.php';
$smarty = new Smarty();
$smarty->debugging false;
$smarty->force_compile true;
$smarty->caching false;
$smarty->compile_check true;
$smarty->cache_lifetime = -1;
$smarty->template_dir '../application/templates';
$smarty->compile_dir '../application/templates_c';
$smarty->plugins_dir = array(
  
SMARTY_DIR 'plugins',
  
'resources/plugins');
Zend_Registry::set('smarty'$smarty); 
Controller
PHP Code:
$smarty Zend_Registry::get('smarty');
        
$form = new forms_AddForm();

$smarty->assign('form'$form);
$smarty->display('user/add.tpl'); 
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 09:13 PM.