<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]// +----------------------------------------------------------------------// | Copyright (c) 2006-2014 http://thinkVeVb.com All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: liu21st <liu21st@gmail.com>// +----------------------------------------------------------------------namespace Think/Template/TagLib;use Think/Template/TagLib;/** * Html标签库驱动 * 这里,居然以前都不怎么用呢 */html' target='_blank'>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标签解析 插入可视化编辑器 * 格式: <html:editor id="editor" name="remark" type="FCKeditor" >{$vo.remark}</html:editor> * @access public * @param array $tag 标签属性 * @return string|void * 开始了 这个里面的 */ public function _editor($tag,$content) { $id = !empty($tag['id'])?$tag['id']: '_editor';// 默认是ID $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 = '<!-- 编辑器调用开始 --><script type="text/javascript" src="__ROOT__/Public/Js/FCKeditor/fckeditor.js"></script><textarea id="'.$id.'" name="'.$name.'">'.$content.'</textarea><script type="text/javascript"> var oFCKeditor = new FCKeditor( "'.$id.'","'.$width.'","'.$height.'" ) ; oFCKeditor.BasePath = "__ROOT__/Public/Js/FCKeditor/" ; oFCKeditor.ReplaceTextarea() ;function resetEditor(){setContents("'.$id.'",document.getElementById("'.$id.'").value)}; function saveEditor(){document.getElementById("'.$id.'").value = getContents("'.$id.'");} function InsertHTML(html){ var oEditor = FCKeditorAPI.GetInstance("'.$id.'") ;if (oEditor.EditMode == FCK_EDITMODE_WYSIWYG ){oEditor.InsertHtml(html) ;}else alert( "FCK必须处于WYSIWYG模式!" ) ;}</script> <!-- 编辑器调用结束 -->'; break; case 'FCKMINI': $parseStr = '<!-- 编辑器调用开始 --><script type="text/javascript" src="__ROOT__/Public/Js/FCKMini/fckeditor.js"></script><textarea id="'.$id.'" name="'.$name.'">'.$content.'</textarea><script type="text/javascript"> var oFCKeditor = new FCKeditor( "'.$id.'","'.$width.'","'.$height.'" ) ; oFCKeditor.BasePath = "__ROOT__/Public/Js/FCKMini/" ; oFCKeditor.ReplaceTextarea() ;function resetEditor(){setContents("'.$id.'",document.getElementById("'.$id.'").value)}; function saveEditor(){document.getElementById("'.$id.'").value = getContents("'.$id.'");} function InsertHTML(html){ var oEditor = FCKeditorAPI.GetInstance("'.$id.'") ;if (oEditor.EditMode == FCK_EDITMODE_WYSIWYG ){oEditor.InsertHtml(html) ;}else alert( "FCK必须处于WYSIWYG模式!" ) ;}</script> <!-- 编辑器调用结束 -->'; break; case 'EWEBEDITOR': $parseStr = "<!-- 编辑器调用开始 --><script type='text/javascript' src='__ROOT__/Public/Js/eWebEditor/js/edit.js'></script><input type='hidden' id='{$id}' name='{$name}' value='{$conent}'><iframe src='__ROOT__/Public/Js/eWebEditor/ewebeditor.htm?id={$name}' frameborder=0 scrolling=no width='{$width}' height='{$height}'></iframe><script type='text/javascript'>function saveEditor(){document.getElementById('{$id}').value = getHTML();} </script><!-- 编辑器调用结束 -->"; break; case 'NETEASE': $parseStr = '<!-- 编辑器调用开始 --><textarea id="'.$id.'" name="'.$name.'">'.$content.'</textarea><iframe ID="Editor" name="Editor" src="__ROOT__/Public/Js/HtmlEditor/index.html?ID='.$name.'" frameBorder="0" marginHeight="0" marginWidth="0" scrolling="No"></iframe><!-- 编辑器调用结束 -->'; break; case 'UBB': $parseStr = '<script type="text/javascript" src="__ROOT__/Public/Js/UbbEditor.js"></script><div><script LANGUAGE="JavaScript"> showTool(); </script></div><div><TEXTAREA id="UBBEditor" name="'.$name.'" >'.$content.'</TEXTAREA></div><div><script LANGUAGE="JavaScript">showEmot(); </script></div>'; break; case 'KINDEDITOR': $parseStr = '<script type="text/javascript" src="__ROOT__/Public/Js/KindEditor/kindeditor.js"></script><script type="text/javascript"> KE.show({ id : /''.$id.'/' ,urlType : "absolute"});</script><textarea id="'.$id.'" name="'.$name.'" >'.$content.'</textarea>'; break; default : $parseStr = '<textarea id="'.$id.'" name="'.$name.'" >'.$content.'</textarea>'; } return $parseStr; }// 准备了类型 还多呢 /** * imageBtn标签解析 * 格式: <html:imageBtn type="" value="" /> * @access public * @param array $tag 标签属性 * @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 = '<div class="'.$style.'" ><input type="'.$type.'" id="'.$id.'" name="'.$name.'" value="'.$value.'" onclick="'.$click.'" class="'.$name.' imgButton"></div>'; }else { $parseStr = '<div class="'.$style.'" ><input type="'.$type.'" id="'.$id.'" name="'.$name.'" value="'.$value.'" onclick="'.$click.'" class="button"></div>'; } return $parseStr; }// 这里的 处理,图片 按钮 /** * imageLink标签解析 * 格式: <html:imageLink type="" value="" /> * @access public * @param array $tag 标签属性 * @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 = '<input title="'.$alt."" type="'.$type.'" id="'.$id.'" name="'.$name.'" onmouseover="this.style.filter=/'alpha(opacity=100)/'" onmouseout="this.style.filter=/'alpha(opacity=80)/'" onclick="'.$click.'" align="absmiddle" class="'.$name.' imgLink">'; return $parseStr; }// 就是个解析了 /** * select标签解析 * 格式: <html:select options="name" selected="value" /> * @access public * @param array $tag 标签属性 * @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 = '<select id="'.$id.'" name="'.$name.'" ondblclick="'.$ondblclick.'" onchange="'.$onchange.'" multiple="multiple" class="'.$style.'" size="'.$size.'" >'; }else { $parseStr = '<select id="'.$id.'" name="'.$name.'" onchange="'.$onchange.'" ondblclick="'.$ondblclick.'" class="'.$style.'" >'; } if(!empty($first)) { $parseStr .= '<option value="" >'.$first.'</option>'; } if(!empty($options)) { $parseStr .= '<?php foreach($'.$options.' as $key=>$val) { ?>'; if(!empty($selected)) { $parseStr .= '<?php if(!empty($'.$selected.') && ($'.$selected.' == $key || in_array($key,$'.$selected.'))) { ?>'; $parseStr .= '<option selected="selected" value="<?php echo $key ?>"><?php echo $val ?></option>'; $parseStr .= '<?php }else { ?><option value="<?php echo $key ?>"><?php echo $val ?></option>'; $parseStr .= '<?php } ?>'; }else { $parseStr .= '<option value="<?php echo $key ?>"><?php echo $val ?></option>'; } $parseStr .= '<?php } ?>'; }else if(!empty($values)) { $parseStr .= '<?php for($i=0;$i<count($'.$values.');$i++) { ?>'; if(!empty($selected)) { $parseStr .= '<?php if(isset($'.$selected.') && ((is_string($'.$selected.') && $'.$selected.' == $'.$values.'[$i]) || (is_array($'.$selected.') && in_array($'.$values.'[$i],$'.$selected.')))) { ?>'; $parseStr .= '<option selected="selected" value="<?php echo $'.$values.'[$i] ?>"><?php echo $'.$output.'[$i] ?></option>'; $parseStr .= '<?php }else { ?><option value="<?php echo $'.$values.'[$i] ?>"><?php echo $'.$output.'[$i] ?></option>'; $parseStr .= '<?php } ?>'; }else { $parseStr .= '<option value="<?php echo $'.$values.'[$i] ?>"><?php echo $'.$output.'[$i] ?></option>'; } $parseStr .= '<?php } ?>'; } $parseStr .= '</select>'; return $parseStr; }// 这个解析了 默认的那个了 /** * checkbox标签解析 * 格式: <html:checkbox checkboxes="" checked="" /> * @access public * @param array $tag 标签属性 * @return string|void */ public function _checkbox($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 .= '<input type="checkbox" checked="checked" name="'.$name.'[]" value="'.$key.'">'.$val.$separator; }else { $parseStr .= '<input type="checkbox" name="'.$name.'[]" value="'.$key.'">'.$val.$separator; } } return $parseStr; }// checkbox 解析 /** * radio标签解析 * 格式: <html:radio radios="name" checked="value" /> * @access public * @param array $tag 标签属性 * @return string|void */ public function _radio($tag) { $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 .= '<input type="radio" checked="checked" name="'.$name.'[]" value="'.$key.'">'.$val.$separator; }else { $parseStr .= '<input type="radio" name="'.$name.'[]" value="'.$key.'">'.$val.$separator; } } return $parseStr; }// radio 里面选择 /** * list标签解析 * 格式: <html:grid datasource="" show="vo" /> * @access public * @param array $tag 标签属性 * @return string */ public function _grid($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 = "<!-- Think 系统列表组件开始 -->/n"; $parseStr .= '<table id="'.$id.'" class="'.$style.'" cellpadding=0 cellspacing=0 >'; $parseStr .= '<tr><td height="5" colspan="'.$colNum.'" class="topTd" ></td></tr>'; $parseStr .= '<tr class="row" >'; //列表需要显示的字段 $fields = array(); foreach($show as $val) { $fields[] = explode(':',$val); } if(!empty($key)) { $parseStr .= '<th width="12">No</th>'; } foreach($fields as $field) {//显示指定的字段 $property = explode('|',$field[0]); $showname = explode('|',$field[1]); if(isset($showname[1])) { $parseStr .= '<th width="'.$showname[1].'">'; }else { $parseStr .= '<th>'; } $parseStr .= $showname[0].'</th>'; } if(!empty($action)) {//如果指定显示操作功能列 $parseStr .= '<th >操作</th>'; } $parseStr .= '</tr>'; $parseStr .= '<volist name="'.$datasource.'" id="'.$name.'" ><tr class="row" >'; //支持鼠标移动单元行颜色变化 具体方法在js中定义 if(!empty($key)) { $parseStr .= '<td>{$i}</td>'; } foreach($fields as $field) { //显示定义的列表字段 $parseStr .= '<td>'; 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 .= '<a href="javascript:'.$href[0].'('.implode(',',$temp).')">'; }else{ $parseStr .= '<a href="javascript:'.$href[0].'(/'{$'.$name.'.'.$href[1].'|addslashes}/')">'; } }else { //如果没有指定默认传编号值 $parseStr .= '<a href="javascript:'.$field[2].'(/'{$'.$name.'.'.$pk.'|addslashes}/')">'; } } 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 .= '</a>'; } $parseStr .= '</td>'; } if(!empty($action)) {//显示功能操作 if(!empty($actionlist[0])) {//显示指定的功能项 $parseStr .= '<td>'; foreach($actionlist as $val) { if(strpos($val,':')) { $a = explode(':',$val); if(count($a)>2) { $parseStr .= '<a href="javascript:'.$a[0].'(/'{$'.$name.'.'.$a[2].'}/')">'.$a[1].'</a> '; }else { $parseStr .= '<a href="javascript:'.$a[0].'(/'{$'.$name.'.'.$pk.'}/')">'.$a[1].'</a> '; } }else{ $array = explode('|',$val); if(count($array)>2) { $parseStr .= ' <a href="javascript:'.$array[1].'(/'{$'.$name.'.'.$array[0].'}/')">'.$array[2].'</a> '; }else{ $parseStr .= ' {$'.$name.'.'.$val.'} '; } } } $parseStr .= '</td>'; } } $parseStr .= '</tr></volist><tr><td height="5" colspan="'.$colNum.'" class="bottomTd"></td></tr></table>'; $parseStr .= "/n<!-- Think 系统列表组件结束 -->/n"; return $parseStr; } // 这里的好复杂了, /** * list标签解析 * 格式: <html:list datasource="" show="" /> * @access public * @param array $tag 标签属性 * @return string */ public function _list($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 = $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 = "<!-- Think 系统列表组件开始 -->/n"; $parseStr .= '<table id="'.$id.'" class="'.$style.'" cellpadding=0 cellspacing=0 >'; $parseStr .= '<tr><td height="5" colspan="'.$colNum.'" class="topTd" ></td></tr>'; $parseStr .= '<tr class="row" >'; //列表需要显示的字段 $fields = array(); foreach($show as $val) { $fields[] = explode(':',$val); } if(!empty($checkbox) && 'true'==strtolower($checkbox)) {//如果指定需要显示checkbox列 $parseStr .='<th width="8"><input type="checkbox" id="check" onclick="CheckAll(/''.$id.'/')"></th>'; } if(!empty($key)) { $parseStr .= '<th width="12">No</th>'; } foreach($fields as $field) {//显示指定的字段 $property = explode('|',$field[0]); $showname = explode('|',$field[1]); if(isset($showname[1])) { $parseStr .= '<th width="'.$showname[1].'">'; }else { $parseStr .= '<th>'; } $showname[2] = isset($showname[2])?$showname[2]:$showname[0]; if($sort) { $parseStr .= '<a href="javascript:sortBy(/''.$property[0].'/',/'{$sort}/',/''.ACTION_NAME.'/')" title="按照".$showname[2].'{$sortType} ">'.$showname[0].'<eq name="order" value="'.$property[0].'" ><img src="__PUBLIC__/images/{$sortImg}.gif" width="12" height="17" border="0" align="absmiddle"></eq></a></th>'; }else{ $parseStr .= $showname[0].'</th>'; } } if(!empty($action)) {//如果指定显示操作功能列 $parseStr .= '<th >操作</th>'; } $parseStr .= '</tr>'; $parseStr .= '<volist name="'.$datasource.'" id="'.$name.'" ><tr class="row" '; //支持鼠标移动单元行颜色变化 具体方法在js中定义 if(!empty($checkbox)) { // $parseStr .= 'onmouseover="over(event)" onmouseout="out(event)" onclick="change(event)" '; } $parseStr .= '>'; if(!empty($checkbox)) {//如果需要显示checkbox 则在每行开头显示checkbox $parseStr .= '<td><input type="checkbox" name="key" value="{$'.$name.'.'.$pk.'}"></td>'; } if(!empty($key)) { $parseStr .= '<td>{$i}</td>'; } foreach($fields as $field) { //显示定义的列表字段 $parseStr .= '<td>'; 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 .= '<a href="javascript:'.$href[0].'('.implode(',',$temp).')">'; }else{ $parseStr .= '<a href="javascript:'.$href[0].'(/'{$'.$name.'.'.$href[1].'|addslashes}/')">'; } }else { //如果没有指定默认传编号值 $parseStr .= '<a href="javascript:'.$field[2].'(/'{$'.$name.'.'.$pk.'|addslashes}/')">'; } } 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 .= '</a>'; } $parseStr .= '</td>'; } if(!empty($action)) {//显示功能操作 if(!empty($actionlist[0])) {//显示指定的功能项 $parseStr .= '<td>'; foreach($actionlist as $val) { if(strpos($val,':')) { $a = explode(':',$val); if(count($a)>2) { $parseStr .= '<a href="javascript:'.$a[0].'(/'{$'.$name.'.'.$a[2].'}/')">'.$a[1].'</a> '; }else { $parseStr .= '<a href="javascript:'.$a[0].'(/'{$'.$name.'.'.$pk.'}/')">'.$a[1].'</a> '; } }else{ $array = explode('|',$val); if(count($array)>2) { $parseStr .= ' <a href="javascript:'.$array[1].'(/'{$'.$name.'.'.$array[0].'}/')">'.$array[2].'</a> '; }else{ $parseStr .= ' {$'.$name.'.'.$val.'} '; } } } $parseStr .= '</td>'; } } $parseStr .= '</tr></volist><tr><td height="5" colspan="'.$colNum.'" class="bottomTd"></td></tr></table>'; $parseStr .= "/n<!-- Think 系统列表组件结束 -->/n"; return $parseStr; }// 这里的那个}PHP编程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答