Discuz!7.0实现PHP代码高亮[原创]

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

插件添加步骤如下:
修改include/discuzcode.func.php

查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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]";

}

在下面添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//////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//////

查找:

1
2
3
4
5
6
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);
    }

在其下加上

1
2
3
4
5
6
7
//////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) 修改

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

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

查找

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

在其下加上:

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

查找

1
2
3
4
    if(wysiwyg) {
                if(cmd == 'code') {
                    text = preg_replace(['<', '>'], ['&lt;', '&gt;'], text);
                }

修改为:

1
2
3
4
    if(wysiwyg) {
                if(cmd == 'code' || cmd == 'php') {
                    text = preg_replace(['<', '>'], ['&lt;', '&gt;'], text);
                }

3.修改模板文件
在 \templates\default\seditor.htm
中查找:

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

在其下添加:

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

在 \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_请更改为你自己的表前缀):

1
2
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);

再点击最下面那个”提交“按钮。

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

我本地测试的效果:
test

编辑器

喜欢这篇文章吗?

请订阅本站 RSS feed填写您的邮件地址,订阅我们的精彩内容:

相关日志

回复 (8)

  1. IsaacZ  / 回复

    行号只显示第一行的,是个遗憾。

  2. phpcode  / 回复

    行号显示不出来啊。

  3. phpcode  / 回复

    知道了。post.js有一个地方没改。
    if(in_array(cmd, ['quote', 'code', 'free', 'hide']))改为
    if(in_array(cmd, ['quote', 'code', 'free', 'hide','php']))
    就可以了
    谢谢博主。

  4. phpcode  / 回复

    不行啊。博主。
    图标出来来。但是点击没有弹出输入框啊。
    能说说吗。谢谢

  5. 荒野无灯  / 回复

    [img]标签自动加入图片盗链程序
    针对目前一些相册的反盗链,必须在图片地址前面加上反盗链程序,很多用户不会使用或者忘记使用,致使论坛上很多叉叉,

    将以下代码<?

    $pics=file($p);

    for($i=0;$i
    复制代码保存为163photo.php上传至空间(譬如http://www.kofans.cn/163photo.php)

    打开bbcode.js
    查找if(!fetchCheckbox(‘bbcodeoff’)) {

    if(allowimgcode) {

    str = str.replace(/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/ig, ‘screen.width*0.7)
    复制代码替换为:if(!fetchCheckbox(‘bbcodeoff’)) {

    if(allowimgcode) {

    str = str.replace(/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/ig, ‘screen.width*0.7)
    复制代码以后就可以随便转贴163相册、QQ相册、SOHU相册、51相册中图片,而不需要做任何反盗链措施
    因为每个[img]标签会自动在图片地址前加上盗链程序http://www.kofans.cn/163photo.php?p=

  6. simaopig  / 回复

    你的论坛地址在哪啊?

发表评论 修改评论取消编辑

允许使用的标签 - 您可以在评论中使用如下的 HTML 标签以及属性。

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 :wink:  :-|  :-x  :twisted:  :)  8-O  :(  :roll:  :-P  :oops:  :-o  :mrgreen:  :lol:  :idea:  :-D  :evil:  :cry:  8)  :arrow:  :-?  :?:  :!:

引用通告 (0)

› 尚无引用通告。

开灯