// +---------------------------------------------------------------------- // $Id: TagLibHtml.class.php 2730 2012-02-12 04:45:34Z liu21st $ namespace Think\Template\Driver; /** +------------------------------- * Html标签库驱动 +------------------------------- */ class Html extends \Think\TagLib{ // 标签定义 protected $tags = array( // 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次 'editor' => array('attr'=>'id,name,style,width,height,type','close'=>1), 'select' => array('attr'=>'name,options,values,output,multiple,id,size,first,change,selected,dblclick','close'=>0), 'grid' => array('attr'=>'id,pk,style,action,actionlist,show,datasource','close'=>0), 'list' => array('attr'=>'id,pk,style,action,actionlist,show,datasource,checkbox','close'=>0), 'imagebtn' => array('attr'=>'id,name,value,type,style,click','close'=>0), 'checkbox' => array('attr'=>'name,checkboxes,checked,separator','close'=>0), 'radio' => array('attr'=>'name,radios,checked,separator','close'=>0) ); /** +---------------------------------------------------------- * editor标签解析 插入可视化编辑器 * 格式: {$vo.remark} +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $attr 标签属性 +---------------------------------------------------------- * @return string|void +---------------------------------------------------------- */ public function _editor($tag,$content) { $id = !empty($tag['id'])?$tag['id']: '_editor'; $name = $tag['name']; $style = !empty($tag['style'])?$tag['style']:''; $width = !empty($tag['width'])?$tag['width']: '100%'; $height = !empty($tag['height'])?$tag['height'] :'320px'; // $content = $tag['content']; $type = $tag['type'] ; switch(strtoupper($type)) { case 'FCKEDITOR': $parseStr = ' '; break; case 'FCKMINI': $parseStr = ' '; break; case 'EWEBEDITOR': $parseStr = ""; break; case 'NETEASE': $parseStr = ''; break; case 'UBB': $parseStr = '
'; break; case 'KINDEDITOR': $parseStr = ''; break; default : $parseStr = ''; } return $parseStr; } /** +---------------------------------------------------------- * imageBtn标签解析 * 格式: +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $attr 标签属性 +---------------------------------------------------------- * @return string|void +---------------------------------------------------------- */ public function _imageBtn($tag) { $name = $tag['name']; //名称 $value = $tag['value']; //文字 $id = isset($tag['id'])?$tag['id']:''; //ID $style = isset($tag['style'])?$tag['style']:''; //样式名 $click = isset($tag['click'])?$tag['click']:''; //点击 $type = empty($tag['type'])?'button':$tag['type']; //按钮类型 if(!empty($name)) { $parseStr = '
'; }else { $parseStr = '
'; } return $parseStr; } /** +---------------------------------------------------------- * imageLink标签解析 * 格式: +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $attr 标签属性 +---------------------------------------------------------- * @return string|void +---------------------------------------------------------- */ public function _imgLink($tag) { $name = $tag['name']; //名称 $alt = $tag['alt']; //文字 $id = $tag['id']; //ID $style = $tag['style']; //样式名 $click = $tag['click']; //点击 $type = $tag['type']; //点击 if(empty($type)) { $type = 'button'; } $parseStr = ''; return $parseStr; } /** +---------------------------------------------------------- * select标签解析 * 格式: +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $attr 标签属性 +---------------------------------------------------------- * @return string|void +---------------------------------------------------------- */ public function _select($tag) { $name = $tag['name']; $options = $tag['options']; $values = $tag['values']; $output = $tag['output']; $multiple = $tag['multiple']; $id = $tag['id']; $size = $tag['size']; $first = $tag['first']; $selected = $tag['selected']; $style = $tag['style']; $ondblclick = $tag['dblclick']; $onchange = $tag['change']; if(!empty($multiple)) { $parseStr = ''; } if(!empty($first)) { $parseStr .= ''; } if(!empty($options)) { $parseStr .= '$val) { ?>'; if(!empty($selected)) { $parseStr .= ''; $parseStr .= ''; $parseStr .= ''; $parseStr .= ''; }else { $parseStr .= ''; } $parseStr .= ''; }else if(!empty($values)) { $parseStr .= ''; if(!empty($selected)) { $parseStr .= ''; $parseStr .= ''; $parseStr .= ''; $parseStr .= ''; }else { $parseStr .= ''; } $parseStr .= ''; } $parseStr .= ''; return $parseStr; } /** +---------------------------------------------------------- * checkbox标签解析 * 格式: +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $attr 标签属性 +---------------------------------------------------------- * @return string|void +---------------------------------------------------------- */ public function _checkbox($tag,$content) { $name = $tag['name']; $checkboxes = $tag['checkboxes']; $checked = $tag['checked']; $separator = $tag['separator']; $checkboxes = $this->tpl->get($checkboxes); $checked = $this->tpl->get($checked)?$this->tpl->get($checked):$checked; $parseStr = ''; foreach($checkboxes as $key=>$val) { if($checked == $key || in_array($key,$checked) ) { $parseStr .= ''.$val.$separator; }else { $parseStr .= ''.$val.$separator; } } return $parseStr; } /** +---------------------------------------------------------- * radio标签解析 * 格式: +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $attr 标签属性 +---------------------------------------------------------- * @return string|void +---------------------------------------------------------- */ public function _radio($tag,$content) { $name = $tag['name']; $radios = $tag['radios']; $checked = $tag['checked']; $separator = $tag['separator']; $radios = $this->tpl->get($radios); $checked = $this->tpl->get($checked)?$this->tpl->get($checked):$checked; $parseStr = ''; foreach($radios as $key=>$val) { if($checked == $key ) { $parseStr .= ''.$val.$separator; }else { $parseStr .= ''.$val.$separator; } } return $parseStr; } /** +---------------------------------------------------------- * list标签解析 * 格式: * +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $attr 标签属性 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ public function _grid($tag,$content) { $id = $tag['id']; //表格ID $datasource = $tag['datasource']; //列表显示的数据源VoList名称 $pk = empty($tag['pk'])?'id':$tag['pk'];//主键名,默认为id $style = $tag['style']; //样式名 $name = !empty($tag['name'])?$tag['name']:'vo'; //Vo对象名 $action = !empty($tag['action'])?$tag['action']:false; //是否显示功能操作 $key = !empty($tag['key'])?true:false; if(isset($tag['actionlist'])) { $actionlist = explode(',',trim($tag['actionlist'])); //指定功能列表 } if(substr($tag['show'],0,1)=='$') { $show = $this->tpl->get(substr($tag['show'],1)); }else { $show = $tag['show']; } $show = explode(',',$show); //列表显示字段列表 //计算表格的列数 $colNum = count($show); if(!empty($action)) $colNum++; if(!empty($key)) $colNum++; //显示开始 $parseStr = "\n"; $parseStr .= ''; $parseStr .= ''; $parseStr .= ''; //列表需要显示的字段 $fields = array(); foreach($show as $val) { $fields[] = explode(':',$val); } if(!empty($key)) { $parseStr .= ''; } foreach($fields as $field) {//显示指定的字段 $property = explode('|',$field[0]); $showname = explode('|',$field[1]); if(isset($showname[1])) { $parseStr .= ''; } if(!empty($action)) {//如果指定显示操作功能列 $parseStr .= ''; } $parseStr .= ''; $parseStr .= ''; //支持鼠标移动单元行颜色变化 具体方法在js中定义 if(!empty($key)) { $parseStr .= ''; } foreach($fields as $field) { //显示定义的列表字段 $parseStr .= ''; } if(!empty($action)) {//显示功能操作 if(!empty($actionlist[0])) {//显示指定的功能项 $parseStr .= ''; } } $parseStr .= '
No'; }else { $parseStr .= ''; } $parseStr .= $showname[0].'操作
{$i}'; if(!empty($field[2])) { // 支持列表字段链接功能 具体方法由JS函数实现 $href = explode('|',$field[2]); if(count($href)>1) { //指定链接传的字段值 // 支持多个字段传递 $array = explode('^',$href[1]); if(count($array)>1) { foreach ($array as $a){ $temp[] = '\'{$'.$name.'.'.$a.'|addslashes}\''; } $parseStr .= ''; }else{ $parseStr .= ''; } }else { //如果没有指定默认传编号值 $parseStr .= ''; } } if(strpos($field[0],'^')) { $property = explode('^',$field[0]); foreach ($property as $p){ $unit = explode('|',$p); if(count($unit)>1) { $parseStr .= '{$'.$name.'.'.$unit[0].'|'.$unit[1].'} '; }else { $parseStr .= '{$'.$name.'.'.$p.'} '; } } }else{ $property = explode('|',$field[0]); if(count($property)>1) { $parseStr .= '{$'.$name.'.'.$property[0].'|'.$property[1].'}'; }else { $parseStr .= '{$'.$name.'.'.$field[0].'}'; } } if(!empty($field[2])) { $parseStr .= ''; } $parseStr .= ''; foreach($actionlist as $val) { if(strpos($val,':')) { $a = explode(':',$val); if(count($a)>2) { $parseStr .= ''.$a[1].' '; }else { $parseStr .= ''.$a[1].' '; } }else{ $array = explode('|',$val); if(count($array)>2) { $parseStr .= ' '.$array[2].' '; }else{ $parseStr .= ' {$'.$name.'.'.$val.'} '; } } } $parseStr .= '
'; $parseStr .= "\n\n"; return $parseStr; } /** +---------------------------------------------------------- * list标签解析 * 格式: * +---------------------------------------------------------- * @access public +---------------------------------------------------------- * @param string $attr 标签属性 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ public function _list($tag,$content) { $id = $tag['id']; //表格ID $datasource = $tag['datasource']; //列表显示的数据源VoList名称 $pk = empty($tag['pk'])?'id':$tag['pk'];//主键名,默认为id $style = $tag['style']; //样式名 $name = !empty($tag['name'])?$tag['name']:'vo'; //Vo对象名 $action = $tag['action']=='true'?true:false; //是否显示功能操作 $key = !empty($tag['key'])?true:false; $sort = $tag['sort']=='false'?false:true; $checkbox = $tag['checkbox']; //是否显示Checkbox if(isset($tag['actionlist'])) { if(substr($tag['actionlist'],0,1)=='$') { $actionlist = $this->tpl->get(substr($tag['actionlist'],1)); }else { $actionlist = $tag['actionlist']; } $actionlist = explode(',',trim($actionlist)); //指定功能列表 } if(substr($tag['show'],0,1)=='$') { $show = $this->tpl->get(substr($tag['show'],1)); }else { $show = $tag['show']; } $show = explode(',',$show); //列表显示字段列表 //计算表格的列数 $colNum = count($show); if(!empty($checkbox)) $colNum++; if(!empty($action)) $colNum++; if(!empty($key)) $colNum++; //显示开始 $parseStr = "\n"; $parseStr .= ''; $parseStr .= ''; $parseStr .= ''; //列表需要显示的字段 $fields = array(); foreach($show as $val) { $fields[] = explode(':',$val); } if(!empty($checkbox) && 'true'==strtolower($checkbox)) {//如果指定需要显示checkbox列 $parseStr .=''; } if(!empty($key)) { $parseStr .= ''; } foreach($fields as $field) {//显示指定的字段 $property = explode('|',$field[0]); $showname = explode('|',$field[1]); if(isset($showname[1])) { $parseStr .= ''; }else{ $parseStr .= $showname[0].''; } } if(!empty($action)) {//如果指定显示操作功能列 $parseStr .= ''; } $parseStr .= ''; $parseStr .= ''; } if(!empty($key)) { $parseStr .= ''; } foreach($fields as $field) { //显示定义的列表字段 $parseStr .= ''; } if(!empty($action)) {//显示功能操作 if(!empty($actionlist[0])) {//显示指定的功能项 $parseStr .= ''; } } $parseStr .= '
No'; }else { $parseStr .= ''; } $showname[2] = isset($showname[2])?$showname[2]:$showname[0]; if($sort) { $parseStr .= ''.$showname[0].'操作
{$i}'; if(!empty($field[2])) { // 支持列表字段链接功能 具体方法由JS函数实现 $href = explode('|',$field[2]); if(count($href)>1) { //指定链接传的字段值 // 支持多个字段传递 $array = explode('^',$href[1]); if(count($array)>1) { foreach ($array as $a){ $temp[] = '\'{$'.$name.'.'.$a.'|addslashes}\''; } $parseStr .= ''; }else{ $parseStr .= ''; } }else { //如果没有指定默认传编号值 $parseStr .= ''; } } if(strpos($field[0],'^')) { $property = explode('^',$field[0]); foreach ($property as $p){ $unit = explode('|',$p); if(count($unit)>1) { $parseStr .= '{$'.$name.'.'.$unit[0].'|'.$unit[1].'} '; }else { $parseStr .= '{$'.$name.'.'.$p.'} '; } } }else{ $property = explode('|',$field[0]); if(count($property)>1) { $parseStr .= '{$'.$name.'.'.$property[0].'|'.$property[1].'}'; }else { $parseStr .= '{$'.$name.'.'.$field[0].'}'; } } if(!empty($field[2])) { $parseStr .= ''; } $parseStr .= ''; foreach($actionlist as $val) { if(strpos($val,':')) { $a = explode(':',$val); if(count($a)>2) { $parseStr .= ''.$a[1].' '; }else { $parseStr .= ''.$a[1].' '; } }else{ $array = explode('|',$val); if(count($array)>2) { $parseStr .= ' '.$array[2].' '; }else{ $parseStr .= ' {$'.$name.'.'.$val.'} '; } } } $parseStr .= '
'; $parseStr .= "\n\n"; return $parseStr; } } ?>