先来个常用的练练手,高深的自己啄木吧、
1.我们知道zend默认会自动注册/views/helpers下的助手。如果不在这个目录下,那就需要addHelperPath之类的东西来加载指定的路径
2.根据上上一节,说的通常是继承Zend_View_Helper_Abstract,这个是必须的。然后类的前缀要求是Zend_View_Helper_。这个的唯一好处就是是zend默认命名空间,不需要定义。如果你不用Zend_View_Helper_也可以,那就需要注册了。所以没必要大费周折。所以就用Zend_View_Helper_前缀即可。
来,贴点文档说明“
--------------------------------------------------
编写自定义的助手类很容易,只要遵循以下几个原则即可:
helper的类名最后部分必须是helper的名称,并使用混合大小写字格式。例如,你在写一个名为“specialPurpose”的类,类名将至少是"SpecialPurpose",另外你还应该给类名加上前缀,建议将“View_Helper”作为前缀的一部份:“My_View_Helper_SpecialPurpose”。(注意大小写)你将需要将前缀(包含或不包含下划线)传递给addHelperPath()
或setHelperPath()
。
类中必须有一个public的方法,该方法名与helper类名相同。该方法将在你的模板调用"$this->specialPurpose()"时执行。在我们的“specialPurpose”例子中,相应的方法声明可以是“public function specialPurpose()”。
一般来说,助手类不应该echo或print或有其它形式的输出。它只需要返回值就可以了。返回的数据应当被转义。
类文件的命名应该是助手类的名称,比如在"specialPurpose"例子中,文件要存为“SpecialPurpose.php”。
把助手类的文件放在你的助手路径下, Zend_View
就会自动加载,实例化,持久化,并执行。
下面是一个SpecialPurpose
助手代码的例子:
<?phpclass My_View_Helper_SpecialPurpose{ protected $_count = 0; public function specialPurpose() { $this->_count++; $output = "I have seen 'The Jerk' {$this->_count} time(s)."; return htmlspecialchars($output); }}
在视图代码中,可以调用 SpecialPurpose
助手任意次。它将被实例化一次,并且会在Zend_View
实例的生命周期内持久存在。
<?php// remember, in a view script, $this refers to the Zend_View instance.echo $this->specialPurpose();echo $this->specialPurpose();echo $this->specialPurpose();
输出结果如下所示:
I have seen 'The Jerk' 1 time(s).I have seen 'The Jerk' 2 time(s).I have seen 'The Jerk' 3 time(s).
有时候需要访问调用Zend_View
对象-例如,如果需要使用已指定的编码字符集,或想解析其它视图脚本作为助手的一部分。为了访问视图对象,助手类应该有一个setView($view)
方法,如下:
<?phpclass My_View_Helper_ScriptPath{ public $view; public function setView(Zend_View_Interface $view) { $this->view = $view; } public function scriptPath($script) { return $this->view->getScriptPath($script); }}
如果助手类有一个 setView()
方法,它将在助手类第一次实例
--------------------------------------------
”
创建助手的应用举例
写一个很挫的部门select控件
1;创建类文件:/views/helpers/DepartmentSelect.php
2.类代码如下:
<?php/** * Helper * *//** * DepartmentSelectHelper * */class Zend_View_Helper_DepartmentSelect extends Zend_View_Helper_Abstract{ private $_departmentModel; /** * 获取部门列表 * @param string $id * @param string $default * @param array $attr * @return string */ public function departmentSelect ($id,$default=null,$html=null) { $this->_departmentModel = new Model_DepartmentModel (); $department = $this->_departmentModel->getList(); $select_str = PHP_EOL.'<select id="'.$id.'" name="info['.$id.']" '.$html.'>'.PHP_EOL; $opton_str = ''; foreach ($department['result'] as $ky=>$val){ $opton_str .= sprintf('<option value="%s" '. ( $default==$val['dep_id'] ? 'selected' : '' ).'>%s</option>'.PHP_EOL,$val['dep_id'],$val['dep_name']); } $select_str .= $opton_str.PHP_EOL;; $select_str .= '</select>'.PHP_EOL; return $select_str; }}
3.view,phtml中的使用方法是:
无默认值
<?php echo $this->departmentSelect('user_department',null,' class="select" ');?>
有默认值
<?php echo $this->departmentSelect('user_department',$this->data['user_department'],' class="select" ');?>
是不是可以写点程序,去练练手了!遵循规则,就不会吃大亏。