网站地图    收藏   

主页 > 后端 > php资料库 >

CI简单实现Widget程序代码_自学php网

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 周末看了看wordpress,感觉到旁边的小工具很好用,然后回想drupal,yii中都有那么个东西,然而我们目前使用的CI中却没有,所以简单实现了一个。 同事之前的实现是在views中用require的方...

周末看了看wordpress,感觉到旁边的小工具很好用,然后回想drupal,yii中都有那么个东西,然而我们目前使用的CI中却没有,所以简单实现了一个。
同事之前的实现是在views中用require的方法实现的。感觉这样不爽,而且那样就缺少了和数据库之间的交互,就算你可以用当前控制器传递过来的数据,但是总归有些东西还是分开的比较好。
想法是这样的,widget作为一个libary的形式存在,这样就可以用CI的load了,然后控制器中传递键值型数组,分别配置controller,method。这样我们将指定一个默认的叫做default的widget。想要多个widget,那么就调用他的register吧!传递的参数包括一个名字和一堆参数,该参数数组和构造函数中的参数数组是一样的。
这样我们也不用特意的实现继承,而且不用改变CI的开发思路。比较简单吧!最后在需要的地方调用Widget的run方法。就可以输出那个控制器的那一部分了。
run方法有一个名称参数,显示之前需要在之前用register注册过该名字的widget,否则将报错。该参数默认为default。
类的代码如下:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
* 单独区块的渲染
* @author istrone
*/
class Widget {


/**
* 控制器
* @var string
*/
private $_controller;

/**
* 方法名
* @var string
*/
private $_method;

/**
* 参数
* @var array
*/
private $_params;

/**
* 构造函数
* @param array $params 传递的参数包括controller,method,params的键的数组,
*/
public function __construct($params=array()){
if(count($params)!=0)
$this->init('default', $params);
}

/**
* 注册widget
* @param string $name widget的名字
* @param array $params 传递的参数包括controller,method,params的键的数组
*/
public function register($name,$params){
$this->init($name, $params);
}

/**
* 类的内部数据初始化
* @param string $name widget的名字
* @param array $params 传递的参数包括controller,method,params的键的数组
*/
private function init($name,$params){
if(array_key_exists('controller', $params) && array_key_exists('method', $params)){
extract($params);
if(class_exists($controller)){
$c = new $controller();
if(is_a($c, 'CI_Controller') && method_exists($c, $method)){
$this->_controller[$name] = $controller;
$this->_method[$name] = $method;
$this->_params[$name] = isset($params['params']) ? $params: NULL;
}
}
}else{
show_error('您传递的参数不合法!');
}
}

/**
* 运行输出区块
*/
public function run($name='default'){
if(array_key_exists($name, $this->_controller)){
$c = $this->_controller[$name];
$m = $this->_method[$name];
$c = new $c();
$c->$m($this->_params[$name]);
}else {
show_error('您的widget調用沒有初始化!');
}
}

}

将以上文件保存为widget.php,放到application下的library中,然后使用。简单使用如下:

$this->load->library('widget',array('controller'=>'welcome','method'=>'test','params'=>array())); //其中params可以省略
$this->widget->run(); //默认渲染default的widget
$this->widget->register('first',array('controller'=>'welcome','method'=>'test','params'=>array()));
$this->load->view('welcome_message');
$this->widget->run('first'); //渲染first的widget

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论