Zend Framework教程-Zend_Helpers-视图助手-创建自己的视图助手

先来个常用的练练手,高深的自己啄木吧、


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 助手代码的例子:

<?php
class 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) 方法,如下:

<?php
class 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" ');?>


是不是可以写点程序,去练练手了!遵循规则,就不会吃大亏。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值