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 内部整体结构
* Label_d 结尾部分
*/
private function pbs_zhfunc_one($matchest){
$Label_a = $matchest['0']['0'];
$Label_b = $matchest['1']['0'];
$Label_c = $matchest['2']['0'];
$Label_d = $matchest['3']['0'];
$arr_srow = $this->Parser($Label_a,$Label_b,$Label_c,$Label_d);
return array($Label_a,$arr_srow);
}
/**
*@desc:获取内部结构
*@date:2016122210447
*@for_arrp 循环的参数
*@f_arr 循环的数组名称loop
*@f_arr_data 循环的数组名称$data
*@f_arr_key 循环的数组名称val
*@for_arr_html 循环的html 标签
* 没有处理有key存在的情况
*/
private function pbs_loops_hstr($Label_c){
$regex_loop = "/{(loop.*?)}(.*?){(\/loop.*?)}/si";
if(preg_match_all($regex_loop, $Label_c, $Label_c_arr)){
$for_arrp = explode(' ',$Label_c_arr['1']['0']);
$f_arr = $for_arrp['0'];
$f_arr_data = $for_arrp['1'];
$f_arr_key = $for_arrp['2'];
$for_arr_html = $Label_c_arr['2']['0'];
$Label_c_arr_qbej = array('loop'=>$f_arr,'data'=>$f_arr_data,'key'=>$f_arr_key,'html'=>$for_arr_html);
}
return $Label_c_arr_qbej?$Label_c_arr_qbej:'';
}
/**
*@desc:处理位置
*@date:201612221017
* Label_a 读取整体结构
* Label_b 读取整体结构xcar:tlist row="10" order="desc"
* Label_c 内部整体结构
* Label_d 结尾部分
*/
private function pbs_zhfunc_row($matchest){
for($i=0;$i < count($matchest['0']);$i++){
$Label_a = $matchest['0'][$i];
$Label_b = $matchest['1'][$i];
$Label_c = $matchest['2'][$i];
$Label_d = $matchest['3'][$i];
$arr_srow = $this->Parser($Label_a,$Label_b,$Label_c,$Label_d);
$arr_str[$i] = array($Label_a,$arr_srow);
}
return $arr_str;
}
/**
*@desc:处理返回的参数
*@date:20161221
*/
private function pb_configure($str){
$strc ='';
foreach($str as $skey => $sval){
$sval_arr = explode('=',$sval);
if($skey >0){
$strc[$sval_arr['0']] = str_replace('"','',$sval_arr[1]);
}
}
return $strc;
}
private function cf_existsyn($clss,$obj,$fun_f){
if(!class_exists($clss)){
die('ERROR::传入类不存在');
}
if(!method_exists($obj,$fun_f)){
die('ERROR::传入函数不存在');
}
}
}
?>
Android提供了许多可视的组件。通过自定义样式和主题,可以避免用这些组件开发的应用看上去千篇一律。 样式和主题都是通过预定义一系列属性值来形成统一的显示风格。区别是,样式只能应用于某种类型的View;而主题刚好相反,它不能应用于特定的View,而只能作用于一个或多个Activity,或是整个应用。 以下结合具体例子说明如何定义样式和主题: 1.定义样式和主题 在工程中res/values/下添加styles.xml 1. 2.