Hi Matthew,

Thanks for the prompt reply.

Please consider 'definitive' as 'a way to do what I need in a ZendFramework
way without having to wait for a new release' :)

After I posted the message I found another info about using Smarty and
ViewRenderer =>
http://naneau.nl/2007/05/31/using-naneau_view_smarty-with-rc1

I will try that since it seems to work with the current 'way of doing
things'.

Thanks again.


On 7/30/07, Matthew Weier O'Phinney <[EMAIL PROTECTED]> wrote:
>
>
> There was a change to Zend_View_Interface introduced in the 1.0.0RC
> series due to, as you mention, the viewRenderer helper.
>
> > The class code is listed bellow but after searching for a while I saw
> some
> > posts regarding the ViewRenderer.  Since I'll have to recode some files
> I am
> > looking for a 'definitive' way to integrate Smarty with Zend without
> having to
> > wait until Zend_Layout appears...
>
> There likely will never be a "definitive" way to integrate Smarty, as
> it's not part of ZF. ;-)
>
> Another thing to note is that Smarty likes to have all templates grouped
> under a common tree. To work around this in projects I've done, I've
> made addScriptPath(), setBasePath(), and addBasePath() all work on an
> internal path array. Then in render(), I loop over those paths looking
> for the template, and, if not found, simply call fetch() on it,
> indicating it should fetch from the default template path setup at
> Smarty initialization.
>
> So, as an example:
>
> <?php
> require_once 'Zend/View/Interface.php';
>
> class Smarty_View implements Zend_View_Interface
> {
>     protected $_scriptPath = array();
>
>     protected $_smarty;
>
>     public function __construct(array $options = null)
>     {
>         if (null !== $options) {
>             if (!isset($options['smarty'])) {
>                 throw new Exception('Smarty_View requires a Smarty
> instance');
>             }
>
>             foreach ($options as $key => $value) {
>                 switch ($key) {
>                     case 'smarty':
>                         $this->_smarty = $value;
>                         break;
>                     case 'scriptPath':
>                         $this->setScriptPath($value);
>                         break;
>                     default:
>                         break;
>                 }
>             }
>         }
>     }
>
>     public function __set($key, $value)
>     {
>         $this->_smarty->assign($key, $value);
>     }
>
>     public function __get($key)
>     {
>         return $this->_smarty->get_template_vars($key);
>     }
>
>     public function __isset($key)
>     {
>         return (null !== $this->_smarty->get_template_vars($key));
>     }
>
>     public function __unset($key)
>     {
>         $this->_smarty->clear_assign($key);
>     }
>
>     public function getEngine()
>     {
>         return $this->_smarty;
>     }
>
>     public function setScriptPath($path)
>     {
>         $path = (array) $path;
>         foreach ($path as $dir) {
>             if (!is_dir($dir)) {
>                 throw new Exception('Invalid script path "' . $dir . '"');
>             }
>         }
>
>         $this->_scriptPath = $path;
>         return $this;
>     }
>
>     public function setBasePath($path, $prefix = 'Zend_View')
>     {
>         $path = ltrim($path, '/');
>         $path .= '/scripts';
>         return $this->setScriptPath($path);
>     }
>
>     public function addScriptPath($path)
>     {
>         if (!is_string($path) || !is_dir($path)) {
>             throw new Exception('Invalid script path "' . $path . '"');
>         }
>
>         $this->_scriptPath[] = $path;
>         return $this;
>     }
>
>     public function addBasePath($path, $prefix = 'Zend_View')
>     {
>         $path = rtrim($path, '/');
>         $path .= '/scripts';
>         return $this->addScriptPath($path);
>     }
>
>     public function getScriptPath($script)
>     {
>         return $this->_getScriptPath($script);
>     }
>
>     public function getScriptPaths()
>     {
>         return $this->_scriptPath;
>     }
>
>     public function assign($spec, $value = null)
>     {
>         if (is_array($spec)) {
>             $this->_smarty->assign($spec);
>         } elseif (is_string($spec) && (null !== $value)) {
>             $this->_smarty->assign($spec, $value);
>         } else {
>             throw new Exception('Invalid call to assign variables; use
> assoc array or string/value pair');
>         }
>
>         return $this;
>     }
>
>     public function clearVars()
>     {
>         $this->_smarty->clear_all_assign();
>         return $this;
>     }
>
>     public function render($name)
>     {
>         $name = $this->_getScriptPath($name);
>         return $this->_smarty->fetch($name);
>     }
>
>     protected function _getScriptPath($name)
>     {
>         if (!file_exists($name) && (!empty($this->_scriptPath))) {
>             foreach (array_reverse($this->_scriptPath) as $path) {
>                 $tmp = $path . DIRECTORY_SEPARATOR . $name;
>                 if (file_exists($tmp)) {
>                     $name = $tmp;
>                     break;
>                 }
>             }
>         }
>
>         return $name;
>     }
> }
>
> --
> Matthew Weier O'Phinney
> PHP Developer            | [EMAIL PROTECTED]
> Zend - The PHP Company   | http://www.zend.com/
>

Reply via email to