Discuz!7.0实现PHP代码高亮[原创]
时间:2009-05-01
来源:互联网
原创文章(函数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]
在其下加上[code]
//////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//////
[/code]2.修改include\js\post.js
function wrapTags(tagname, useoption, selection) 修改[code]
insertText(text, strlen(opentag), strlen(closetag), in_array(tagname, ['code', 'quote', 'free', 'hide']) ? true : false);
[/code]为[code]
insertText(text, strlen(opentag), strlen(closetag), in_array(tagname, ['code', 'quote', 'free', 'hide','php']) ? true : false);
[/code]查找[code]
lang['e_code'] = '请输入要插入的代码';
[/code]在其下加上:[code]
lang['e_php'] = '请输入要插入的php代码';
[/code]查找[code] if(wysiwyg) {
if(cmd == 'code') {
text = preg_replace(['<', '>'], ['<', '>'], text);
}
[/code]修改为:[code]
if(wysiwyg) {
if(cmd == 'code' || cmd == 'php') {
text = preg_replace(['<', '>'], ['<', '>'], text);
}
[/code]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]
在其下添加:[code]
<!--{if in_array('php', $seditor[1])}-->
<a href="javascript:;" title="{lang e_php}" class="tb_php" onclick="seditor_insertunit('$seditor[0]', '', '')">PHP</a>
<!--{/if}-->[/code]在 \templates\default\css_seditor.htm
中查找:[code]
.editor_tb div a.tb_code { background-position: -3px -461px; }
[/code]在其下加上:[code]
.editor_tb div a.tb_php { background-position: -3px -521px; }
[/code]在 \templates\default\css_editor.htm 中查找:#e_cmd_code { background-position: 0 -461px;}
在其下加上:[code]
#e_cmd_php { background-position: 0px -521px; }
[/code]最后,进入DZ后台,“工具”->”数据库“->”升级 “,
在”Discuz! 数据库升级 - 请将数据库升级语句粘贴在下面“下的的框中粘贴以下代码(注意,cdb_bbcodes中的cdb_请更改为你自己的表前缀):[code]
INSERTINTO `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);
[/code]再点击最下面那个”提交“按钮。
将\images\common\editor.gif替换为这个
好了,现在,进入DZ后台,“界面”->“编辑器设置”->“ Discuz! 代码”
看下php标签是否躺在那了?在去前台发个帖子看下。
我本地测试的效果见:http://blog.thinkstd.com/php/dis ... pdaimagaoliang.html
转载本站文章请注明,转载自Think Studio
本文链接: http://blog.thinkstd.com/php/dis ... pdaimagaoliang.html
作者: sejie10011 发布时间: 2009-05-01
作者: 齐迹 发布时间: 2009-05-01
作者: sejie10011 发布时间: 2009-05-01
用个PHP函数就解决了.
作者: 冯.于安 发布时间: 2009-05-01
作者: jinco 发布时间: 2009-05-02
于安
如果你有更简单的方法,那么不妨说说。
想看一下你怎样用一个函数就把PHP代码高亮在DISCUZ 中实现。并且功能跟我这个一样。
作者: sejie10011 发布时间: 2009-05-02
//内容中有无 <?php 都可以.
$sqlstr = '
/*
# @category: 分享工作室;
# @copyright: 分享在线传媒公社;
# @var; index FEN ;
# @version: PHPnew 5.0 Official Version;
*/
//$lib->view($GLOBAL);
include template("fenanr");
'; //此数据从sql而来, 当然怎么弄成这样, 是你们需要前期考虑的.
preg_match('/\[php\](.+)\[\/php\]/isU',$sqlstr,$arr);
//为了强化兼容,我们处理头尾.
$arr = strtr($arr[1],array('<?php'=>'','<?'=>'','?>'=>''));
$string = sprintf('<?php %s ?>',$arr);
echo highlight_string($string,true);
?>[/code]写在php文件中。
作者: 冯.于安 发布时间: 2009-05-02
于安
先且不说你上面那个代码能不能正常工作了。
呵呵,你这个方法比我的简单吗?我看不出。
我的方法其实关键的也就两个函数。
其他是添加一个按钮而已。
难道你连这个都看不出? 就单纯的添加一个函数这还用得着你说? 地球人都会。
DZ 代码高亮 其实很简单,但DZ的编辑器就是个复杂的东东了。
作者: sejie10011 发布时间: 2009-05-03
作者: 冯.于安 发布时间: 2009-05-03
先且不说你上面那个代码能不能正常工作了。
呵呵,你这个方法比我的简单吗?我看不出。
我的方法其实关键的也就两个函数。
其他是添加一个按钮而已。
难道你连这个都看不出? 就单纯 ...
sejie10011 发表于 2009-5-3 17:11
唉, 算我没回复...
作者: 冯.于安 发布时间: 2009-05-03
这我也知道。我对DZ还是相当熟悉的。 PHPCHINA的这个PHP代码按钮就是从后台加的,我也知道。
但是我那个方法是有其好处的,只是你不知道而已。
作者: sejie10011 发布时间: 2009-05-03
作者: 冯.于安 发布时间: 2009-05-03
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28