先來個常用的練練手,高深的自己啄木吧、
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" ');?>
是不是可以寫點程序,去練練手了!遵循規則,就不會吃大虧。