发新话题
打印

Discuz!6.0正式版 PHP代码高亮显示插件(修正dz6.0附件图片缩略图显示问题)

Discuz!6.0正式版 PHP代码高亮显示插件(修正dz6.0附件图片缩略图显示问题)

插件安装文件我已经打过包了,可以直接安装到没有修改过的DZ6.0论坛上。如果有修改过其中文件的代码,则可以看如下修改步骤:

1.修改include/javascrīpt/viewthread.js

查找
[php]
function copycode(obj) {
if(is_ie && obj.style.display != 'none') {
  var rng = document.body.createTextRange();
  rng.moveToElementText(obj);
  rng.scrollIntoView();
  rng.select();
  rng.execCommand("Copy");
  rng.collapse(false);
}
}
[/php]

在这个函数结束的下面添加:
[php]
/*修改*/
function saveCode(obj) {
        var winname = window.open('', '_blank', 'top=10000');
        winname.document.open('text/html', 'replace');
        winname.document.writeln(obj.value);
        winname.document.execCommand('saveas','','code.htm');
        winname.close();
}
[/php]

2.修改include/discuzcode.func.php

查找
[php]
function codedisp($code) {
global $discuzcodes;
$discuzcodes['pcodecount']++;
$code = htmlspecialchars(str_replace('\\"', '"', preg_replace("/^[\n\r]*(.+?)[\n\r]*$/is", "[url=file://1/]\\1[/url]", $code)));
$discuzcodes['codehtml'][$discuzcodes['pcodecount']] = tpl_codedisp($discuzcodes, $code);
$discuzcodes['codecount']++;
return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]";
}

[/php]

在这个函数结束的下面添加:
[php]
/*修改*/
function phpcodedisp($code) {
        global $discuzcodes;
        $discuzcodes['pcodecount']++;
        $code = phphighlite(str_replace('\\"', '"', preg_replace("/^[\n\r]*(.+?)[\n\r]*$/is", "[url=file://1/]\\1[/url]", $code)));
        $discuzcodes['codehtml'][$discuzcodes['pcodecount']] = tpl_codedisp($discuzcodes, $code);//"<br><br><div class=\"msgbody\"><div class=\"msgheader\"><div class=\"right\"><a href=\"###\" class=\"smalltxt\" onclick=\"copycode($('code$discuzcodes[codecount]'));\">[复制PHP代码]</a> <a class=\"smalltxt\" href=\"###\" onclick=\"toggle_collapse('code$discuzcodes[codecount]');\">[ <span id=\"code$discuzcodes[codecount]_symbol\">-</span> ]</a></div>;PHP代码如下:</div><div class=\"msgborder\" id=\"code$discuzcodes[codecount]\">$code</div></div><br>";
        $discuzcodes['codecount']++;
        return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]";
}
function phphighlite($code) {
        if(!strpos($code,"<?n") && !strpos($code,'<? ') && substr($code,0,2) != '<?') {
                $code = '<'.'?'.trim($code).'?'.'>';
                $addedtags = 1;
        }
        ob_start();
        $oldlevel = error_reporting(0);
        highlight_string($code);
        error_reporting($oldlevel);
        $buffer = ob_get_contents();
        ob_end_clean();
        if ($addedtags) {
                $openingpos = strpos($buffer, '?');
                $closingpos = strrpos($buffer, '?');
                $buffer = substr($buffer, $openingpos+1, $closingpos-($openingpos+1)).substr($buffer, $closingpos+5);
        }
        $buffer = str_replace('"', "\"", $buffer);
        $buffer = str_replace('<br />','', $buffer);
        return $buffer;
}

[/php]

3.继续修改include/discuzcode.func.php

查找:
[php]
if($parsetype != 1 && !$bbcodeoff && $allowbbcode) {
  $message = preg_replace("/\s*\[code\](.+?)\[\/code\]\s*/ies", "codedisp('\\1')", $message);
}
[/php]

在其下面添加:
[php]
/*修改*/
if($parsetype != 1 && !$bbcodeoff && $allowbbcode) {
        $message = preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "phpcodedisp('\\1')", $message);
    }

[/php]

4.修改include/javascript/editor.js

查找
[php]
insertText(text, strlen(opentag), strlen(closetag), in_array(tagname, ['code', 'quote', 'free', 'hide']) ? true : false);

[/php]
修改为:
[php]
insertText(text, strlen(opentag), strlen(closetag), in_array(tagname, ['code', 'quote', 'free', 'hide','php']) ? true : false);
[/php]
5.继续修改include/javascript/editor.js

查找:
[php]
if(in_array(cmd, ['quote', 'code', 'free', 'hide'])) {
[/php]
修改为:
[php]
if(in_array(cmd, ['quote', 'code', 'free', 'hide','php'])) {
[/php]

6.修改templates/default/post_editor.htm

查找
[php]lang['post_discuzcode_hide'] = '{lang post_discuzcode_input_hide}';[/php]
在下面添加
[php]lang['post_discuzcode_php'] = '{lang post_discuzcode_input_php}';[/php]


继续查找:
[php]
      <td><a id="{$editorid}_cmd_code"><img src="images/common/bb_code.gif" title="{lang post_discuzcode_code}" alt="Code" /></a></td>

[/php]
在下面添加:
[php]
                        <td><a id="{$editorid}_cmd_php"><img src="images/common/bb_php.gif" title="{lang post_discuzcode_php}"  alt="Php" /></a></td>
[/php]

7修改templates/default/templates.lang.php

查找
[php] 'post_discuzcode_code' => '插入代码',[/php]
下面添加
[php] 'post_discuzcode_php' => '插入PHP代码',[/php]
继续查找
[php] 'post_discuzcode_input_code' => '请输入要插入的代码',[/php]
下面添加
[php] 'post_discuzcode_input_php' => '请输入要插入的PHP代码',[/php]

然后上传bb_php.gif到 images/common 目录下


DZ6.0缩略图显示问题是由于DZ官方代码中的一个BUG引起的,修改起来也很简单

打开include/javascrīpt/viewthread.js

修改第一段函数
[php]
function attachimg(obj, action) {
if(action == 'load') {
  if(!msgwidth) {
   var re = /postcontent|message/i;
   var testobj = obj;
   while((testobj = testobj.parentNode) != null) {
    var matches = re.exec(testobj.className);
    if(matches != null) {
     msgwidth = testobj.clientWidth - 20;
     break;
    }
   }
   if(!msgwidth) {
    msgwidth = 1000;
   }
  }
  if(obj.width > msgwidth) {
   obj.resized = true;
   obj.width = msgwidth;
   obj.style.cursor = 'pointer';
  } else {
   obj.onclick = null;
  }
  obj.onload = null;
} else if(action == 'mouseover') {
  if(obj.resized) {
   obj.style.cursor = 'pointer';
  }
}
}

[/php]
修改为
[php]
function attachimg(obj, action) {
if(action == 'load') {
  if(is_ie && is_ie < 7) {
   var objinfo = fetchOffset(obj);
   msgwidth = document.body.clientWidth - objinfo['left'] - 20;
  } else {
   if(!msgwidth) {
    var re = /postcontent|message/i;
    var testobj = obj;
    while((testobj = testobj.parentNode) != null) {
     var matches = re.exec(testobj.className);
     if(matches != null) {
      msgwidth = testobj.clientWidth - 20;
      break;
     }
    }
    if(msgwidth < 1) {
     msgwidth = window.screen.width;
    }
   }
  }
  if(obj.width > msgwidth) {
   obj.resized = true;
   obj.width = msgwidth;
   obj.style.cursor = 'pointer';
  } else {
   obj.onclick = null;
  }
} else if(action == 'mouseover') {
  if(obj.resized) {
   obj.style.cursor = 'pointer';
  }
}
}

[/php]

附件

php_code.rar (47.1 KB)

2007-9-1 10:55, 下载次数: 168

网络无限,生活无限

TOP

有问题诚心请教管理员

费了半天功夫 终于在界面上实现了个 运行代码的功能
可问题却并不想想的那么简单 一是还没有真正实现
我提交的信息换行符 输出来却显示 <br />

这个好像和处理引用代码的方式一样 可不知道怎么修改能改正过来

不知道是不是 输出来的信息 让这个函数作用的
function codedisp($code) {
        global $discuzcodes;
        $discuzcodes['pcodecount']++;
        $code = htmlspecialchars(str_replace('\\"', '"', preg_replace("/^[\n\r]*(.+?)[\n\r]*$/is", "\\1", $code)));
        $discuzcodes['codehtml'][$discuzcodes['pcodecount']] = tpl_codedisp($discuzcodes, $code);
        $discuzcodes['codecount']++;
        return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]";
}
考虑到这个函数的时候 我却怎么也找不着这个函数在哪里被引用了
好像他定义了 却没使用到
还请帮忙看一下问题的所在
[php]测试
测试[/php]

TOP

这两个有什么区别么

[php]这两个有什么区别么
输出在Textarea在标签中会发现 原来的换行变成了
了么[/php]
复制内容到剪贴板
代码:
这两个有什么区别么
输出在Textarea在标签中会发现 原来的换行变成了
了么

TOP

发新话题