活力37848
在线时间12167 小时
阅读权限200
管理员
自由的灵魂
- 积分
- 100460
- 主题
- 5590
- 回帖
- 26311
- 注册时间
- 2003-4-10
- 最后登录
- 2024-11-24
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 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]
在其下加上:- //////Discuz!7.0实现PHP代码高亮 by 荒野无灯 blog.thinkstd.cn//////
- if($parsetype != 1 && !$bbcodeoff && $allowbbcode && (strpos($message, '[/php]') || strpos($message, '[/PHP]')) !== FALSE) {
- $message = preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "phpcodedisp('\\1')", $message );
- }
- //////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 中查找:
- .editor_tb div a.tb_code { background-position: -3px -461px; }
复制代码
在其下加上:
- .editor_tb div a.tb_php { background-position: -3px -521px; }
复制代码
在 \templates\default\css_editor.htm 中查找:
- #e_cmd_code { background-position: 0 -461px;}
复制代码
在其下加上:
- #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修改了部分文字表述) |
|