找回密码
 立即注册

QQ登录

只需一步,快速开始

教程经验总索引TVMW5/小日本5 索引【视频转换】小日本4/TE4XP 索引【视频转换】TAW4 / TDA3 索引【DVD打包软件】
Nero 索引DVD-Lab 索引【DVD打包软件】编解码器 索引 【必读】固顶帖011号
查看: 5538|回复: 0

[Discuz!论坛] Discuz!7.0 实现PHP代码带颜色高亮显示(完整修订版)

[复制链接]

9328

威望

244

金钱

1万

贡献

管理员

自由的灵魂

积分
99815
主题
5263
回帖
26212
注册时间
2003-4-10
最后登录
2024-3-29
发表于 2009-5-2 23:28:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 IsaacZ 于 2009-9-9 02:05 编辑

by 荒野无灯 ~ 四月 19th, 2009.

原创文章(函数phphighlite()来自网络),转载请注明出处。

插件添加步骤如下:

修改include/discuzcode.func.php

查找

[php]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]//////Discuz!7.0实现PHP代码高亮 by 荒野无灯 blog.thinkstd.cn//////

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('
', '', $buffer);
return $buffer;
}


function phpcodedisp($code) {
global $discuzcodes;
$discuzcodes['pcodecount']++;


$code = phphighlite(str_replace('\\"', '"', preg_replace("/^[\n\r]*(.+?)[\n\r]*$/is", "\\1", $code)));


$discuzcodes['codehtml'][$discuzcodes['pcodecount']] ="<div class=\"blockcode\"><h5>;PHP代码:</h5><div id=\"code$discuzcodes[codecount]\"><ol><li>$code</ol></div><em onclick=\"copycode($('code$discuzcodes[codecount]'));\">复制内容到剪贴板</em></div>";


// $discuzcodes['codehtml'][$discuzcodes['pcodecount']] = tpl_codedisp($discuzcodes, $code);

$discuzcodes['codecount']++;
return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]";
}


//////Discuz!7.0实现PHP代码高亮 by 荒野无灯 blog.thinkstd.cn//////[/php]

查找:

[php]function discuzcode($message, $smileyoff, $bbcodeoff, $htmlon = 0, $allowsmilies = 1, $allowbbcode = 1, $allowimgcode = 1, $allowhtml = 0, $jammer = 0, $parsetype = '0', $authorid = '0', $allowmediacode = '0', $pid = 0) {
global $discuzcodes, $credits, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre, $hideattach;

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

在其下加上:
  1. //////Discuz!7.0实现PHP代码高亮 by 荒野无灯 blog.thinkstd.cn//////
  2. if($parsetype != 1 && !$bbcodeoff && $allowbbcode && (strpos($message, '[/php]') || strpos($message, '[/PHP]')) !== FALSE) {

  3. $message = preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "phpcodedisp('\\1')", $message );

  4. }
  5. //////Discuz!7.0实现PHP代码高亮 by 荒野无灯 blog.thinkstd.cn//////
复制代码
2. 修改 include\js\post.js

找到 function wrapTags(tagname, useoption, selection) 条目,下面找到:

[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]

查找:

[php]if(in_array(cmd, ['quote', 'code', 'free', 'hide']))[/php]

修改为:

[php]if(in_array(cmd, ['quote', 'code', 'php', 'free', 'hide'])) {[/php]

查找:

[php]lang['e_code'] = '请输入要插入的代码';[/php]

在其下加上:

[php]lang['e_php'] = '请输入要插入的php代码';[/php]

查找:

[php] if(wysiwyg) {
if(cmd == 'code') {
text = preg_replace(['<', '>'], ['<', '>'], text);
}[/php]

修改为:

[php] if(wysiwyg) {
if(cmd == 'code' || cmd == 'php') {
text = preg_replace(['<', '>'], ['<', '>'], text);
}[/php](IsaacZ注:实际上只修改了第2行。)

3. 修改模板文件

\templates\default\seditor.htm 中查找:

[php]<!--{if in_array('code', $seditor[1])}-->
        <a href="javascript:;" title="{lang e_code}" class="tb_code">Code</a>
    <!--{/if}-->
[/php]


在其下添加:


[php]<!--{if in_array('php', $seditor[1])}-->
        <a href="javascript:;" title="{lang e_php}" class="tb_php">;PHP</a>
    <!--{/if}-->
[/php]


\templates\default\css_seditor.htm 中查找:


  1. .editor_tb div a.tb_code { background-position: -3px -461px; }
复制代码



在其下加上:

  1. .editor_tb div a.tb_php { background-position: -3px -521px; }
复制代码


\templates\default\css_editor.htm 中查找:

  1. #e_cmd_code { background-position: 0 -461px;}
复制代码



在其下加上:

  1. #e_cmd_php { background-position: 0px -521px; }
复制代码



最后,进入DZ后台,“工具”->”数据库“->”升级 “,
在”Discuz! 数据库升级 – 请将数据库升级语句粘贴在下面“下的的框中粘贴以下代码(注意,cdb_bbcodes中的cdb_请更改为你自己的表前缀):


[php]INSERT INTO `cdb_bbcodes` (`id`, `available`, `type`, `tag`, `icon`, `replacement`, `example`, `explanation`, `params`, `prompt`, `nest`, `displayorder`) VALUES
(25, 2, 1, 'php', 'cmd_php', '', '', '插入php代码', 1, '', 1, 10);[/php]
再点击最下面那个”提交“按钮。

IsaacZ注:如果你在DISCUZ编辑器中曾经添加过其他自定义按钮,则提交命令时可能会遇到错误“MySQL Error : Duplicate entry 25 for key 1”。此时请进入 PhpMyAdmin 看看 cdb_bbcodes 表中最后一个记录的 ID 是几,假设最后一个 ID 是28,我们就把上面代码里面的 25 改成 29。如果你无法进入或不知如何进入 PhpMyAdmin ,则可以直接将 25 改成一个较大的数如35,同样可以解决问题。


将\images\common\editor.gif 替换为 这个
好了,现在,进入DZ后台,“界面”->“编辑器设置”->“ Discuz! 代码”
看下php标签是否躺在那了?在去前台发个帖子看下。

我本地测试的效果:




                               
登录/注册后可看大图




                               
登录/注册后可看大图



转自:  http://blog.thinkstd.com/php/dis ... pdaimagaoliang.html(IsaacZ修改了部分文字表述)
IsaacZ的发言中如果提到任何字母缩写或专有名词,在本论坛中一般都能搜索到。点此立即搜索点拨论坛。如有搜索不到的,请尝试搜索百度百科,或者跟帖提问。
发帖前请注意看置顶帖。如果你发现自己的问题没有得到回答,说明你的问题提错了地方或者提问前未先阅读本版规则固顶帖011号
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|点拨论坛

GMT+8, 2024-3-29 02:30 , Processed in 0.986583 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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