Discuz!论坛实现PHP代码高亮

发布人:kimi  时间:2007-10-23 23:00  来源: Php Question  查看: 865次
插件演示地址:Discuz!论坛实现PHP代码高亮:http://www.phpq.net/bbs/thread-5-1-1.html


插件添加步骤如下:

修改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]

在下面添加:

CODE:

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\"><span class=\"headactions\" onclick=\"copycode($('code{$discuzcodes['codecount']}'));\">复制内容到剪贴板</span><h5>HP代码:</h5><code id=\"code{$discuzcodes['codecount']}\">{$code}</code></div>";
        $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('
', '', $buffer);
        return $buffer;
}
继续修改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]修改include/javascript/editor.js

查找

CODE:

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

CODE:

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

查找

CODE:

if(in_array(cmd, ['quote', 'code', 'free', 'hide'])) {修改为

CODE:

if(in_array(cmd, ['quote', 'code', 'free', 'hide', 'php'])) {6.修改templates/default/post_bbinsert.htm

查找

CODE:

<td><a id="{$editorid}_cmd_code"><img src="images/common/bb_code.gif" title="{lang post_discuzcode_code}" alt="Code" /></a></td>在下面添加

CODE:

<td><a id="{$editorid}_cmd_php"><img src="images/common/bb_php.gif" title="HP代码" alt="php" /></a></td>然后上传bb_php.gif到 images/common 目录下

文章评论

共有 4 位PhpQ的网友发表了评论查看完整内容

  • 习明发表评论: 2007-10-23 23:04:02
  • 说实话 功能还可以 就是那个bb_php.gif图片...
  • kimi发表评论: 2007-10-23 23:04:11
  • 考,楼上居然抢我的沙发!

    恩,不错终于搞好了。
    在discuz.net上找了半天还是觉着这个效果比较好。顺便修改成符合Discuz!6.0的了。
    测试下!
    [php]function getrobot() {
        if(!defined('IS_ROBOT')) {
            $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
            $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';
            if(preg_match("/($kw_browsers)/", $_SERVER['HTTP_USER_AGENT'])) {
                define('IS_ROBOT', FALSE);
            } elseif(preg_match("/($kw_spiders)/", $_SERVER['HTTP_USER_AGENT'])) {
                define('IS_ROBOT', TRUE);
            } else {
                define('IS_ROBOT', FALSE);
            }
        }
        return IS_ROBOT;
    }
    [/php]
  • 小铭铭发表评论: 2007-10-24 15:57:07
  • 靠...楼上最近要疯了
  • mrqqq发表评论: 2008-2-23 17:12:26
  • 试一下:
    [php]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\"><span class=\"headactions\" onclick=\"copycode($('code{$discuzcodes['codecount']}'));\">复制内容到剪贴板 </span><h5>HP代码:</h5><code id=\"code{$discuzcodes['codecount']}\">{$code}</code></div>";
            $discuzcodes['codecount']++;
            return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]";
    }[/php]

PHP论坛热门