Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[发布] 不开html发帖插入表格完美版(任意列,任意行) 表格插件已分离

[复制链接]
haohao036 发表于 2006-2-21 22:56:38 | 显示全部楼层 |阅读模式
作者:nameless
分离:haohao036

  1. [tbl][b]标题一[/b],[b]标题二[/b],[b]标题三[/b],[b]标题四[/b]
  2. 第一列,第二列,第三列,第四列
  3. 第一列,第二列,第三列,[color=orangered]*[/color]
  4. [entity=center]爱国,守法
  5. 自律,真实,文明[/entity],[entity=left]
  6. 1:自觉遵守:爱国、守法、自律、真实、文明的原则
  7. 2:《互联网站电子公告服务倡议书》 [url]http://tech.sina.com.cn/i/c/2002-02-09/102936.shtml[/url]
  8. 3:尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》[url]http://tech.sina.com.cn/i/c/65606.shtml[/url]及中华人民共和国其他各项有关法律法规
  9. 4:严禁发表危害国家安全、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的作品
  10. 5:承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  11. 6:神话传奇论坛各栏目的版主有权保留或删除其管辖论坛中的任意内容
  12. 7:您在神话传奇论坛发表的作品,神话传奇论坛有权在网站内免费转载或引用
  13. 8:提交者发言纯属个人意见,与本网站立场无关
  14. 9:《全国青少年网络文明公约》
  15. 全国青少年网络文明公约
  16. [/entity]
  17. 第一列,第二列,第三列,
  18. 第一列,第二列,第三列
  19. 第一列,第二列,,第四列[/tbl]
复制代码



Snap1.gif

原插件地址: http://www.freediscuz.net/dev/viewthread.php?tid=12268&extra=page%3D1

带自定义表格标签,实体标签,支持背景色,限制了表格最多可有的列数为20,防止用户恶意使用,行中超过20个界定符的将被视为一行,不进行列划分,多标签支持(不推荐使用,已经很慢了),实体部分不分列



修改discuzcode.func.php

查找:最下面的

  1. ?>
复制代码



上面加入

  1. //06-01-12-tbl-begin
  2. function parse_tbl($message,$tag='',$entity=''){
  3.         $tag = $tag ? $tag : 'tbl';
  4.         $entity = $entity ? $entity : 'entity';
  5.         @preg_match_all("/\[".$tag."=?[a-f\d\#]*?\](.*?)\[\/".$tag."\]/is",$message,$matches);
  6.         if(is_array($matches[1])){
  7.                 $i=0;
  8.                 $cmatchs = array();
  9.                 foreach($matches[1] as $key => $val){
  10.                         @preg_match_all("/(\[".$entity."(=left|=center|=right)?\].*?\[\/".$entity."\])/is",$val,$cmatch);
  11.                         if(is_array($cmatch[0])){
  12.                                 foreach($cmatch[0] as $ckey => $cval){
  13.                                         $val = str_replace($cval,"[".$entity."=$i]mark[/".$entity."]",$val);
  14.                                         $len=0;
  15.                                         $len2=0;
  16.                                         $align=NULL;
  17.                                         if($cmatch[2][$ckey]){
  18.                                                 $align = substr($cmatch[2][$ckey],1);
  19.                                                 $len = strlen($align)+1;
  20.                                         }
  21.                                         $len += strlen($entity)+2;
  22.                                         $len2 += $len+strlen($entity)+3;
  23.                                         $align = strstr(',left,right,center,',','.$align.',') ? $align : 'center';
  24.                                         $cmatchs[$i] = '<div align="'.$align.'">'.trim(substr($cval,$len,strlen($cval)-$len2)).'</div>';
  25.                                         $i++;
  26.                                 }
  27.                         }
  28.                         @$temp = explode("\n",$val);
  29.                         $max = 0;
  30.                         if(is_array($temp)){
  31.                                 foreach($temp as $tkey => $tval){
  32.                                         if(!trim($tval)){
  33.                                                 unset($temp[$tkey]);
  34.                                                 continue;
  35.                                         }
  36.                                         if (substr_count($tval,',')<=20){
  37.                                          @$temp2 = explode(",",$tval);
  38.                                         } else {
  39.                                          $temp2 = array($tval);
  40.                                         }
  41.                                         $max = (count($temp2) > $max) ? count($temp2) : $max;
  42.                                 }
  43.                         }

  44.                         $tt = NULL;
  45.                         if(is_array($temp)){
  46.                                 foreach($temp as $tkey => $tval){
  47.                                         $ii=0;
  48.                                         if (substr_count($tval,',')<=20){
  49.                                                 @$t = explode(',',$tval);
  50.                                         } else {
  51.                                                 $t = array($tval);
  52.                                         }
  53.                                         $tc = count($t);
  54.                                         $diff = $max - $tc;
  55.                                         $diff = $diff ? $diff+1 : 0;
  56.                                         $tt .= '<tr>';
  57.                                         if(is_array($t)){
  58.                                                 foreach($t as $ttkey => $ttval){
  59.                                                         $ii++;
  60.                                                         if($ii==$tc && $diff){
  61.                                                                 $tt .= '<td colspan="'.$diff.'">'.$ttval.'</td>';
  62.                                                         }else{
  63.                                                                 $tt .= '<td>'.$ttval.'</td>';
  64.                                                         }
  65.                                                 }
  66.                                         }
  67.                                         $tt .= '</tr>';
  68.                                 }
  69.                         }
  70.                         $temp3 = $matches[0][$key];
  71.                         $tbinfo = substr($temp3,0,strpos($temp3,']'));
  72.                         $color = NULL;
  73.                         if($pos = strpos($tbinfo,'=')){
  74.                                 $pos++;
  75.                                 $color = trim(substr($tbinfo,$pos));
  76.                         }
  77.                         $color = $color ? $color : '#eeeecc';
  78.                         $tt = '<table align="center" border="1" class="innertable" cellSpacing="0" cellPadding="4" style="background-color:'.$color.';" >'.$tt.'</table>';
  79.                         @$replacement = str_replace(array("\n","\r"),'',$tt);
  80.                         @$message = str_replace($temp3,$replacement,$message);

  81.                 }
  82.         }

  83.         if(is_array($cmatchs)){
  84.                 $pattern = $replacement = array();
  85.                 foreach($cmatchs as $key => $val){
  86.                         $pattern[] = "[".$entity."=$key]mark[/".$entity."]";
  87.                         $replacement[] = $val;
  88.                 }
  89.                 $message = str_replace($pattern,$replacement,$message);
  90.         }

  91.         unset($matches,$match,$temp,$temp2,$diff,$tc,$t,$tt,$replacement,$temp3,$cmatchs,$pattern);

  92.         return $message;
  93. }
  94. //06-01-12-tbl-end
复制代码




继续查找:

  1. if(!$bbcodeoff && $allowimgcode) {
复制代码


下面添加

  1.                         if(strstr($message,'[/tbl]')){
  2.                                 $message = parse_tbl($message);
  3.                         }
复制代码



修改 templates/default/css.htm

查找:

  1. --></style>
复制代码


上面加上

  1. .innertable {cursor:default;width:90%;background-color:#ffffff; border-collapse:collapse; border-Color:#999999; text-align:center;}
  2. .innertable td {border-color:#ffffff}
复制代码



本地测试OK

[ 本帖最后由 haohao036 于 2006-5-31 12:16 编辑 ]
回复

使用道具 举报

PerfectWorks 发表于 2006-2-21 22:58:14 | 显示全部楼层
沙发~
回复

使用道具 举报

PerfectWorks 发表于 2006-2-21 22:58:47 | 显示全部楼层
很实用的东西!
回复

使用道具 举报

 楼主| haohao036 发表于 2006-2-21 22:59:42 | 显示全部楼层
怎么像小蚊
回复

使用道具 举报

渡雨 发表于 2006-2-21 23:28:45 | 显示全部楼层
长宽,怎么控制
回复

使用道具 举报

ndren 发表于 2006-2-21 23:31:44 | 显示全部楼层
支持兄弟,呵。
回复

使用道具 举报

PerfectWorks 发表于 2006-2-21 23:44:14 | 显示全部楼层

回复 #4 haohao036 的帖子

赫赫~~~换名了
回复

使用道具 举报

alantam 发表于 2006-2-22 00:43:44 | 显示全部楼层
不错!!!支持!
回复

使用道具 举报

 楼主| haohao036 发表于 2006-2-22 08:43:02 | 显示全部楼层
让更多的人用上。。顶一下。。。
回复

使用道具 举报

温馨阁 发表于 2006-2-22 10:15:12 | 显示全部楼层
支持阿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-11-22 08:17 , Processed in 0.128622 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表