先來(lái)個(gè)常用的練練手,高深的自己啄木吧、
1.我們知道zend默認(rèn)會(huì)自動(dòng)注冊(cè)/views/helpers下的助手。如果不在這個(gè)目錄下,那就需要addHelperPath之類(lèi)的東西來(lái)加載指定的路徑
2.根據(jù)上上一節(jié),說(shuō)的通常是繼承Zend_View_Helper_Abstract,這個(gè)是必須的。然后類(lèi)的前綴要求是Zend_View_Helper_。這個(gè)的唯一好處就是是zend默認(rèn)命名空間,不需要定義。如果你不用Zend_View_Helper_也可以,那就需要注冊(cè)了。所以沒(méi)必要大費(fèi)周折。所以就用Zend_View_Helper_前綴即可。
來(lái),貼點(diǎn)文檔說(shuō)明“
--------------------------------------------------
編寫(xiě)自定義的助手類(lèi)很容易,只要遵循以下幾個(gè)原則即可:
helper的類(lèi)名最后部分必須是helper的名稱(chēng),并使用混合大小寫(xiě)字格式。例如,你在寫(xiě)一個(gè)名為“specialPurpose”的類(lèi),類(lèi)名將至少是"SpecialPurpose",另外你還應(yīng)該給類(lèi)名加上前綴,建議將“View_Helper”作為前綴的一部份:“My_View_Helper_SpecialPurpose”。(注意大小寫(xiě))你將需要將前綴(包含或不包含下劃線(xiàn))傳遞給addHelperPath()
或setHelperPath()
。
類(lèi)中必須有一個(gè)public的方法,該方法名與helper類(lèi)名相同。該方法將在你的模板調(diào)用"$this->specialPurpose()"時(shí)執(zhí)行。在我們的“specialPurpose”例子中,相應(yīng)的方法聲明可以是“public function specialPurpose()”。
一般來(lái)說(shuō),助手類(lèi)不應(yīng)該echo或print或有其它形式的輸出。它只需要返回值就可以了。返回的數(shù)據(jù)應(yīng)當(dāng)被轉(zhuǎn)義。
類(lèi)文件的命名應(yīng)該是助手類(lèi)的名稱(chēng),比如在"specialPurpose"例子中,文件要存為“SpecialPurpose.php”。
把助手類(lèi)的文件放在你的助手路徑下, Zend_View
就會(huì)自動(dòng)加載,實(shí)例化,持久化,并執(zhí)行。
下面是一個(gè)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); }}
在視圖代碼中,可以調(diào)用 SpecialPurpose
助手任意次。它將被實(shí)例化一次,并且會(huì)在Zend_View
實(shí)例的生命周期內(nèi)持久存在。
<?php// remember, in a view script, $this refers to the Zend_View instance.echo $this->specialPurpose();echo $this->specialPurpose();echo $this->specialPurpose();
輸出結(jié)果如下所示:
I have seen 'The Jerk' 1 time(s).I have seen 'The Jerk' 2 time(s).I have seen 'The Jerk' 3 time(s).
有時(shí)候需要訪(fǎng)問(wèn)調(diào)用Zend_View
對(duì)象-例如,如果需要使用已指定的編碼字符集,或想解析其它視圖腳本作為助手的一部分。為了訪(fǎng)問(wèn)視圖對(duì)象,助手類(lèi)應(yīng)該有一個(gè)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); }}
如果助手類(lèi)有一個(gè) setView()
方法,它將在助手類(lèi)第一次實(shí)例
--------------------------------------------
”
創(chuàng)建助手的應(yīng)用舉例
寫(xiě)一個(gè)很挫的部門(mén)select控件
1;創(chuàng)建類(lèi)文件:/views/helpers/DepartmentSelect.php
2.類(lèi)代碼如下:
<?php/** * Helper * *//** * DepartmentSelectHelper * */class Zend_View_Helper_DepartmentSelect extends Zend_View_Helper_Abstract{ private $_departmentModel; /** * 獲取部門(mén)列表 * @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中的使用方法是:
無(wú)默認(rèn)值
<?php echo $this->departmentSelect('user_department',null,' class="select" ');?>
有默認(rèn)值
<?php echo $this->departmentSelect('user_department',$this->data['user_department'],' class="select" ');?>
是不是可以寫(xiě)點(diǎn)程序,去練練手了!遵循規(guī)則,就不會(huì)吃大虧。