欢迎来到天天文库
浏览记录
ID:52243844
大小:131.60 KB
页数:5页
时间:2020-03-25
《phpbb源码分析-模板引擎(2).pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、这篇文章继续phpbb3的模板代码分析,我将在这篇文章里面详细分析template.php的template类中的几个重要的函数。这些函数实现了phpbb3的模板引擎的核心功能。下面将会讲解三个template类中的函数:set_filenames,destroy,destroy_block_varsset_filenames这个函数,在phpbb3的其他地方有这个函数的使用,我这里举个简单的例子:在viewforum.php的文件中有下面这行代码$template->set_filenames(array('body'=>'viewforum_body.html'));下面我们来仔细的瞄一
2、下这个函数到底做了什么。/***Setsthetemplatefilenamesforhandles.$filename_array*shouldbeahashofhandle=>filenamepairs.*@accesspublic*/functionset_filenames($filename_array){if(!is_array($filename_array)){returnfalse;}foreach($filename_arrayas$handle=>$filename){if(empty($filename)){trigger_error("template->set_f
3、ilenames:Emptyfilenamespecifiedfor$handle",E_USER_ERROR);}$this->filename[$handle]=$filename;$this->files[$handle]=$this->root.'/'.$filename;if($this->inherit_root){$this->files_inherit[$handle]=$this->inherit_root.'/'.$filename;}}returntrue;}上面就是这个函数的所有代码,可以看见这个函数非常的简单,主要做的就是将参数中的数组存入$this->filena
4、me和$this->files中,可以看到这两个的区别只是,filename存的单单是文件名,files存的是文件的路径加文件名。而filename和files的作用将会在讲解functions_template.php的时候讲解到。当然这里我还是没有看出来inherit_root的作用,代码中的逻辑是如果设置了inherit_root,那么就将文件也存在files_inherit中。我在想,这个数组的作用也可能在functions_template.php中可以看到。destroy我们可以看一下destroy的函数,代码很简单,如下/***Destroytemplatedataset*@a
5、ccesspublic*/functiondestroy(){$this->_tpldata=array('.'=>array(0=>array()));}它做的只是$_tpldata的清空,之前有说到过,$_tpldata中存的都是模板的数据,而将$_tpldata的清空意味着模板的销毁。phpbb3的开发人员很聪明。这个函数我们就这样简单的过了,在已经查看的代码中我还没有找到有哪个地方调用了这个函数,以后找到的话补充上来。destroy_block_vars同理,顾名思义,这个函数是用来销毁$_tpldata中的块结构数据的,所谓的块结构数据大致有对象,数组等。/***Reset/emp
6、tycompleteblock*@accesspublic*/functiondestroy_block_vars($blockname){if(strpos($blockname,'.')!==false){//Nestedblock.$blocks=explode('.',$blockname);$blockcount=sizeof($blocks)-1;$str=&$this->_tpldata;for($i=0;$i<$blockcount;$i++){$str=&$str[$blocks[$i]];$str=&$str[sizeof($str)-1];}unset($str[$bl
7、ocks[$blockcount]]);}else{//Top-levelblock.unset($this->_tpldata[$blockname]);}returntrue;}我们可以看到一个简单的逻辑,首先根据这个函数,可以看到在phpbb3的模板中有两种形式的块数据名字定义,它们是:·blockvar·blockvar.subvar.subsubvar可以看到在上面的两种形式的blockvar形式,
此文档下载收益归作者所有