+ -
当前位置:首页 → 问答吧 → Discuz!7.0实现PHP代码高亮[原创]

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

时间:2009-05-01

来源:互联网

本帖最后由 sejie10011 于 2009-5-1 18:20 编辑

原创文章(函数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(['<', '>'], ['&lt;', '&gt;'], text);
                }
[/code]修改为:[code]
  
if(wysiwyg) {
                if(cmd == 'code' || cmd == 'php') {
                    text = preg_replace(['<', '>'], ['&lt;', '&gt;'], 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

下载 (8.45 KB)
2009-5-1 21:19

作者: sejie10011   发布时间: 2009-05-01

如果单单是php, 就没必要这么复杂...

用个PHP函数就解决了.

作者: 冯.于安   发布时间: 2009-05-01

还是感谢分享

作者: jinco   发布时间: 2009-05-02

本帖最后由 sejie10011 于 2009-5-2 17:40 编辑

于安

如果你有更简单的方法,那么不妨说说。

想看一下你怎样用一个函数就把PHP代码高亮在DISCUZ 中实现。并且功能跟我这个一样。

作者: sejie10011   发布时间: 2009-05-02

[code]<?php
//内容中有无 <?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

本帖最后由 sejie10011 于 2009-5-3 17:12 编辑

于安


先且不说你上面那个代码能不能正常工作了。



呵呵,你这个方法比我的简单吗?我看不出。

我的方法其实关键的也就两个函数。

其他是添加一个按钮而已。

难道你连这个都看不出?  就单纯的添加一个函数这还用得着你说? 地球人都会。


DZ 代码高亮 其实很简单,但DZ的编辑器就是个复杂的东东了。

作者: sejie10011   发布时间: 2009-05-03

DZ后台有添加按妞功能, 你这是多此一举...

作者: 冯.于安   发布时间: 2009-05-03

7# 于安


先且不说你上面那个代码能不能正常工作了。



呵呵,你这个方法比我的简单吗?我看不出。

我的方法其实关键的也就两个函数。

其他是添加一个按钮而已。

难道你连这个都看不出?  就单纯 ...
sejie10011 发表于 2009-5-3 17:11
一个php文件,一个js文件,一个html文件,
  唉, 算我没回复...

作者: 冯.于安   发布时间: 2009-05-03

于安


这我也知道。我对DZ还是相当熟悉的。  PHPCHINA的这个PHP代码按钮就是从后台加的,我也知道。

但是我那个方法是有其好处的,只是你不知道而已。

作者: sejie10011   发布时间: 2009-05-03

既然这么复杂, 何不把JS C++ VB PHP都弄好?

作者: 冯.于安   发布时间: 2009-05-03

热门下载

更多