/**
* 函数 data_box
* 功能 根据模板输出数据源中的内容
* 参数
* $fun 回调函数,必须提供。作用是从数据源中读取数据。要求返回的最好是关联数组
* $source 数据源,必须提供。可以是数组或查询结果
* $template 模板,可以没有。未提供模板时用标准表格输出数据
* 模板格式:
* array(top=>"",block=>"",fool=>"")
* 其中:
* top 开始部分
* block 可重复部分,变量为关联数组的键,形如$IN_varname。其中前导的IN_可省略
* fool 结束部分
*/
function data_box($_fun,$_source,$_template="") {
$_ar = $_fun(&$_source);
if($_template == "") {
while(list($k,) = each($_ar)) {
$th .= "
$td .= "
}
$_template = array(top=>"
}else if(! preg_match("/\$IN_\w+/",$_template[block]))
$_template[block] = preg_replace("/[\$](\w*)/U","\$IN_\\1",$_template[block]);
$buf = eval("return \"$_template[top]\";");
do {
extract($_ar, EXTR_PREFIX_ALL, "IN");
$buf .= eval("return \"$_template[block]\";");
}while($_ar = $_fun(&$_source));
$buf .= eval("return \"$_template[fool]\";");
return $buf;
}
function get_data($source) {
if(list($k,$v) = each($source))
return $v;
return false;
}
$arr = array(
array(a=>1,b=>2,c=>3,11,12,31),
array(a=>11,b=>12,c=>13,11,12,131)
);
echo data_box("get_data",$arr);
echo data_box("get_data",$arr,array(top=>"列表测试
"));
$tpl = array(top=>"月历测试
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
|---|---|---|---|---|---|---|
| $0 | $1 | $2 | $3 | $4 | $5 | $6 |
$a = array_merge(array_fill(0,$w=date("w",mktime(0,0,0,date("m"),1,date("Y")))," "),range(1,$d=date("t")),array_fill(0,(7-($w+$d)%7)%7," "));
for($i=0;$i $ar[] = array_slice($a,$i,$i+7); echo ereg_replace(" $tpl = array(top=>"分页导航测试 $record = 20; $pagesize = 6; $pages = ceil($record/$pagesize); $page=2; $ar = array( array($record,$pages,$page, $page>1?"首页":"", $page>1?"上页":"", $page<$pages?"下页":"", $page<$pages?"尾页":"" ) ); echo data_box("get_data",$ar,$tpl); ?>(".date("d")." )","\\1",data_box("get_data",$ar,$tpl));
",block=>'共{$0}条[{$1}页] 第{$2}页 {$3} {$4} {$5} {$6}',fool=>"");

