php-自定义标签解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
php自己定义解析方式(比较简单的写法)
格式:
{sxq:blist num="10" Intercept="10" order="desc"}
{loop $data $r}
{/loop}
{/sxq:blist}
------------------------------------------------------------------------------
以{sxq: }开始
以{/sxq:}结束
冒号紧跟的是传入的数据需要获取的方式
以英文空格分开后面的参数
第二行的{loop}目前里面的参数么有用到,但是不需填写,只要出现loop就行
需要循环的html里面的参数目前是写死的,
必需$r开始取值,
如果需要用到key直接用$k 取,
这个可以根据自己的需要变化,
Php部分—
defined('BASEPATH') OR exit('No direct script access allowed');
class Template
{
//属性
public $vars; //保存要替换的标记和数据的内容
public $left_delimiter = '{*'; //左分隔符
public $right_delimiter = '*}'; //右分隔符
/**
*@@desc:获取全部htmL
*@date:201612221010
*@ html_str html内容
*/
private function html_content_pe($html_str){
$regex2 = "/{(sxq:[a-z].*?)}(.*?){(\/sxq:[a-z].*?)}/si";
if(preg_match_all($regex2, $html_str, $matchest)){
$row_str= $this->Label_html($html_str);
$string = count($matchest['0']) >1?$this->explodeRole($row_str,$html_str):$this->explodeRole_one($row _str,$html_str);
}
return $string?$string:'';
/**
*@@desc:返回传入的参数
*@date:20161221
*@func 匹配模块功能函数
*@farr 匹配模块功能参数
*@html 匹配模块标签
*@data_key html标签
*/
public function pbs_interface($func, $farr='', $html='', $data_key=''){ $fun_t = 'Tag'.$func;
$fun_f = 'tagf'.$func;
$r_name = $fun_t.'.php';
require_once($r_name);
$obj = $fun_t::getObj();
$this->cf_existsyn($fun_t,$obj,$fun_f);
return $obj->$fun_f($farr, $html, $data_key);
}
/**
*@获取布局范围zhi
*@date:201612220909
*/
private function explodeRole($row_str,$str) {
foreach($row_str as $rkey => $rval) {
$fil_a = $rval['0'];
$fil_b = $rval['1'];
$str = str_replace($fil_a, $fil_b, $str);
}
return $str;
}
/**
*@@desc:获取布局范围
*@date:201612220909
*/
private function explodeRole_one($row_str, $html_str){
$fil_a = $row_str['0'];
$fil_b = $row_str['1'];
return str_replace($fil_a, $fil_b, $html_str);
/**
*@获取布局范围
*@date:20161220
*/
private function Label_html($str2){
$regex2 = "/{(sxq:[a-z].*?)}(.*?){(\/sxq:[a-z].*?)}/si";
if(preg_match_all($regex2, $str2, $matchest)){
$arr_str = count($matchest['0']) > 1?$this->pbs_zhfunc_row($matchest):$this->pbs_zhfunc_one($matchest);
return $arr_str;
}
}
/**
*@desc:获取标签内容
*@date:20161221
*@$hui_fun 回调函数定义
*@label_b_arr_config 配置参数
*/
private function Parser($Label_a,$Label_b,$Label_c,$Label_d){
$fun_name = explode(':',$Label_d);
$label_b_arr = explode(' ',$Label_b);
$label_b_arr_config['func'] = $fun_name['1'];
$label_b_arr_config['farr'] = $this->pb_configure($label_b_arr);
return $this->Parser_c($label_b_arr_config,$Label_c);
}
/**
*@获取内部结构
*/
private function Parser_c($label_b_arr_config, $Label_c){
$label_b_arr_config['html'] = $Label_c;
$label_b_arr_config['data_key'] = $this->pbs_loops_hstr($Label_c);
return call_user_func_array(array($this, 'pbs_interface'),$label_b_arr_config);
}
/**
*@desc:处理位置
*@date:201612221017
* Label_a 读取整体结构
* Label_b 读取整体结构xcar:tlist row="10" order="desc"
* Label_c 内部整体结构