CodeIgniter辅助之第三方类库third_party用法分析
本文实例分析了CodeIgniter辅助之第三方类库third_party用法。分享给大家供大家参考,具体如下:
third_party用来存放系统中引入的第三方类库,类库通常提供的功能比较丰富,相应的学习成本也要高些,系统中能用到功能有限,所以建议在引入类库时进行适当的封装,让系统中更方便使用,其他人使用时只需关注扩展的方法而无法关注具体的实现。以CI集成Twig模版为例吧。
首先需要下载Twig类库,并放在third_party中,然后在libraries中进行一次封装,示例如下:
<?phpif(!defined('BASEPATH'))exit('Nodirectscriptaccessallowed');
requireAPPPATH.'third_party/Twig/Autoloader.php';
/**
*Twig模版引擎
*
*/
classTwig
{
public$twig;
public$config;
private$data=array();
/**
*读取配置文件twig.php并初始化设置
*
*/
publicfunction__construct($config)
{
$config_default=array(
'cache_dir'=>false,
'debug'=>false,
'auto_reload'=>true,
'extension'=>'.tpl',
);
$this->config=array_merge($config_default,$config);
Twig_Autoloader::register();
$loader=newTwig_Loader_Filesystem($this->config['template_dir']);
$this->twig=newTwig_Environment($loader,array(
'cache'=>$this->config['cache_dir'],
'debug'=>$this->config['debug'],
'auto_reload'=>$this->config['auto_reload'],
));
$CI=&get_instance();
$CI->load->helper(array('url'));
$this->twig->addFunction(newTwig_SimpleFunction('site_url','site_url'));
$this->twig->addFunction(newTwig_SimpleFunction('base_url','base_url'));
}
/**
*给变量赋值
*
*@paramstring|array$var
*@paramstring$value
*/
publicfunctionassign($var,$value=NULL)
{
if(is_array($var)){
foreach($valas$key=>$val){
$this->data[$key]=$val;
}
}else{
$this->data[$var]=$value;
}
}
/**
*模版渲染
*
*@paramstring$template模板名
*@paramarray$data变量数组
*@paramstring$returntrue返回false直接输出页面
*@returnstring
*/
publicfunctionrender($template,$data=array(),$return=FALSE)
{
$template=$this->twig->loadTemplate($this->getTemplateName($template));
$data=array_merge($this->data,$data);
if($return===TRUE){
return$template->render($data);
}else{
return$template->display($data);
}
}
/**
*获取模版名
*
*@paramstring$template
*/
publicfunctiongetTemplateName($template)
{
$default_ext_len=strlen($this->config['extension']);
if(substr($template,-$default_ext_len)!=$this->config['extension']){
$template.=$this->config['extension'];
}
return$template;
}
/**
*字符串渲染
*
*@paramstring$string需要渲染的字符串
*@paramarray$data变量数组
*@paramstring$returntrue返回false直接输出页面
*@returnstring
*/
publicfunctionparse($string,$data=array(),$return=FALSE)
{
$string=$this->twig->loadTemplate($string);
$data=array_merge($this->data,$data);
if($return===TRUE){
return$string->render($data);
}else{
return$string->display($data);
}
}
}
/*EndoffileTwig.php*/
/*Location:./application/libraries/Twig.php*/
模版的操作通常有一些配置的信息,这里通过config下的twig.php进行配置,通过CIloadlibrary的方式加载时,与类名同名的配置文件存在时,会自动以数组的方式将参数传入类的构造函数。
<?php //默认扩展名 $config['extension']=".tpl"; //默认模版路劲 $config['template_dir']=APPPATH."views/"; //缓存目录 $config['cache_dir']=APPPATH."cache/twig/"; //是否开启调试模式 $config['debug']=false; //自动刷新 $config['auto_reload']=true; /*Endoffiletwig.php*/ /*Location:./application/config/twig.php*/
为了加载base_urlsite_url等函数到模版,类与CI产生了依赖,分离开可能更好,比如在serice中进行一次封装,增加一些自定义函数等,这样其他地方、其他系统也就很方便复用该类了。
更多关于codeigniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》和《CI(CodeIgniter)框架进阶教程》
希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。