// +---------------------------------------------------------------------- namespace app\common\taglib; use think\template\TagLib; /** * Html标签库驱动 */ class Html extends 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 array $tag 标签属性 * @return string|void */ public function tagEditor($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 'UEDITOR': //$parseStr = ' '; $parseStr = ' '; break; 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 array $tag 标签属性 * @return string|void */ public function tagImageBtn($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 array $tag 标签属性 * @return string|void */ public function tagImgLink($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 array $tag 标签属性 * @return string|void */ public function tagSelect($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 array $tag 标签属性 * @return string|void */ public function tagCheckbox($tag) { $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 array $tag 标签属性 * @return string|void */ public function tagRadio($tag) { $name = $tag['name']; $radios = $tag['radios']; $checked = $tag['checked']; $separator = $tag['separator']; $name_is_array = $tag['name_is_array']; if(!empty($name_is_array)){ $name = $name.'[]'; } $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 array $tag 标签属性 * @return string */ public function tagGrid($tag) { $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 array $tag 标签属性 * @return string */ public function tagList($tag) { $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 = 'true' == $tag['action'] ? true : false; //是否显示功能操作 $key = !empty($tag['key']) ? true : false; $sort = '' == $tag['sort'] ? 'desc' : 'asc'; $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++; } $colNum += 2; //用于bootstrap布局样式里多了befer,after两个伪元素 //显示开始 $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' == $field[3]){ //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] . ' '; //var_dump('' . $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; } }