php-自定义标签解析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

php自己定义解析方式(比较简单的写法)

格式:

{sxq:blist num="10" Intercept="10" order="desc"}

{loop $data $r}

  • {$r[title]}
  • {$r[content]}
  • {$r[zut]}
  • {/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 内部整体结构

    相关文档
    最新文档