Zend_View: Access the view from a view helper
It’s in the manual, but I thought I’d blog about my simple View Helper setup that ensures that I can get at the view with minimal effort.
Firstly we create a parent class:
< ?php
abstract class My_View_Helper_Abstract
{
protected $_view;
public function setView($view)
{
$this->_view = $view;
}
}
This class contains the code required by Zend_View to collect an instance of the view and assign it to a protected variable. All my view helpers extend this class and so I can acess the view using $this->_view. For instance:
< ?php
require_once 'My/View/Helper/Abstract.php';
class My_View_Helper_TreeUl extends My_View_Helper_Abstract
{
/**
* Render a nested array as a set of nested
s.
*
* @param array|instanceof Iterator $list
* @return string
*/
function treeUl($list)
{
$output = '';
if (is_array($list) || $list instanceof Iterator) {
if (count($list) > 0) {
$output = "
- \n";
- ";
if(is_string($item)) {
$output .= $this->_view->escape($item);
} else {
$output .= $this->treeUl($item);
}
$output .= "
foreach ($list as $item) {
$output .= "\t
\n";
}
$output .= "
\n";
}
}
return $output;
}
}
Simple, isn’t it ?!
You need to add an extra slash for the \n and \t, they are getting escaped out ;)
The joy of WordPress :)
Thanks!
Regards,
Rob…
When would you want to use this technique? I mean, what does it do? I realize this is painfully noob of me (realize that I am new to programming… sorry) but I don't see what this buys me.
Mary,
Generally, you use this when you need to access other view helpers. In the example, I needed access to the escape() view helper from within another one.
The easiest way is to wrap up the boring bit into a parent class and then it's available whenever you need it without any extra work.
Does that make sense?
Regards,
Rob…