经过几个小时的苦战,终于搞定了Discuz7.0的源代码高亮了.还是要呼吁康盛创想能提供这个功能.当然还是要借助强大的SyntaxHighlighter来做了.请一定要下载(GBK版本,UTF8版)这个修改过的,否则会出现换行符.
效果图如下:

discuz7代码高亮
修改文件:
1./templates/default/discuzcode.htm(修改代码框展现样式)
2./templates/你的风格/header.htm (增加dp.SyntaxHighlighter脚本)
3./templates/你的风格/foot.htm (增加dp.SyntaxHighlighter脚本)
4./include/discuzcode.func.php(修改代码语法标签的解析)
5./include/js/post.js(修改代码语法标签的插入命令)
具体安装:
一./templates/default/discuzcode.htm(修改代码框展现样式)
查找:
function tpl_codedisp($discuzcodes, $code) {
}–>
<!–{block return}–><div class=”blockcode”><div id=”code$discuzcodes[codecount]“><ol><li>$code</ol></div><em onclick=”copycode($(‘code$discuzcodes[codecount]‘));”>{lang discuzcode_copyclipboard}</em></div><!–{/block}–>
<!–{eval return $return;}–>
<!–{eval
}
在这个函数的前面增加:
function tpl_codecsh($discuzcodes, $code, $lang) {
}–>
<!–{block return}–><code id=”code$discuzcodes[codecount]“><pre name=”code” class=”$lang”>$code</pre></code><!–{/block}–>
<!–{eval return $return;}–>
<!–{eval
}
二./templates/你的风格/header.htm (增加dp.SyntaxHighlighter脚本)
在</head>前添加:
<link href=”plugins/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css” type=”text/css” rel=”stylesheet” />
<script src=”plugins/dp.SyntaxHighlighter/Scripts/shCore.js” type=”text/javascript”></script>
<script class=”javascript”>
dp.SyntaxHighlighter.ClipboardSwf = ‘plugins/dp.SyntaxHighlighter/Scripts/clipboard.swf’;
</script>
三.打开/templates/你的风格/foot.htm (增加dp.SyntaxHighlighter脚本)
在</body>前添加:
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shCore.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushCode.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushCSharp.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushPhp.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushJScript.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushJava.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushVb.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushSql.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushXml.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushDelphi.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushPython.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushRuby.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushCss.js”></script>
<script class=”javascript” src=”plugins/dp.SyntaxHighlighter/Scripts/shBrushCpp.js”></script>
<script class=”javascript”>
dp.SyntaxHighlighter.ClipboardSwf = ‘plugins/dp.SyntaxHighlighter/Scripts/clipboard.swf’;
dp.SyntaxHighlighter.HighlightAll(‘code’);
</script>
四./include/discuzcode.func.php(修改代码语法标签的解析)
查找:
function codedisp($code)
在其下添加一个函数:
function codedpdisp($code, $lang) {
global $discuzcodes;
$discuzcodes['pcodecount']++;
$code = htmlspecialchars(str_replace(‘\\”‘, ‘”‘, preg_replace(“/^[\n\r]*(.+?)[\n\r]*$/is”, “\\1″, $code)));
$discuzcodes['codehtml'][$discuzcodes['pcodecount']] = tpl_codecsh($discuzcodes, $code, $lang);
$discuzcodes['codecount']++;
return “[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]”;
}
查找:
$message = preg_replace(“/\s*\[code\](.+?)\[\/code\]\s*/ies", "codedisp('\\1')", $message);
在其上增加:
$message = preg_replace("/\s*\[code=\"(php|xhtml|sql|js|css|xml|html|jscript|javascript|cpp|c|c++|c#|c-sharp|csharp|delphi|pascal|java|py|python|ruby|rails|ror|vb|vb.net|xslt){1}\"\](.+?)\[\/code\]\s*/ies", "codedpdisp('\\2', '\\1')", $message);
查找:
return $htmlon ? $message : nl2br(str_replace(array("\t", ' ', ' '), array(' ', ' ', ' '), $message));
替换为:
$message = $htmlon ? $message : nl2br(str_replace(array("\t", ' ', ' '), array(' ', ' ', ' '), $message));
for($i = 0; $i <= $discuzcodes['pcodecount']; $i++) {
$message = str_replace("[\tDISCUZ_CODE_$i\t]", $discuzcodes['codehtml'][$i], $message);
}
return $message;
(注意:上面的替换其他人的好像和我的不一样.这个替换只供参照)
五./include/javascript/post.js(修改代码语法标签的插入命令)
查找:
</textarea>';
在其下增加:
if (cmd == 'code') {
str += '<br />Lang: <select id="' + ctrlid + '_param_2">'
+ '<option value="">Choose Language</option>'
+ '<option value="php">php</option>'
+ '<option value="xhtml">xhtml</option>'
+ '<option value="sql">sql</option>'
+ '<option value="js">js</option>'
+ '<option value="css">css</option>'
+ '<option value="xml">xml</option>'
+ '<option value="html">html</option>'
+ '<option value="jscript">jscript</option>'
+ '<option value="javascript">javascript</option>'
+ '<option value="cpp">cpp</option>'
+ '<option value="c">c</option>'
+ '<option value="c++">c++</option>'
+ '<option value="c#">c#</option>'
+ '<option value="c-sharp">c-sharp</option>'
+ '<option value="csharp">csharp</option>'
+ '<option value="delphi">delphi</option>'
+ '<option value="pascal">pascal</option>'
+ '<option value="java">java</option>'
+ '<option value="py">py</option>'
+ '<option value="python">python</option>'
+ '<option value="ruby">ruby</option>'
+ '<option value="rails">rails</option>'
+ '<option value="ror">ror</option>'
+ '<option value="vb">vb</option>'
+ '<option value="vb.net">vb.net</option>'
+ '<option value="xslt">xslt</option>'
+ '</select>';
}
查找:
if(wysiwyg) {
if(cmd == 'code') {
text = preg_replace(['<', '>'], ['<', '>'], text);
}
text = text.replace(/\r?\n/g, '<br />');
}
下面添加:
if (cmd == 'code' && $(ctrlid + '_param_2').value != '') {
opentag = '[code="' + $(ctrlid + '_param_2').value + '"]';
text = "\n" + text + "\n";
}
作者: 果子
原文地址: http://www.delphires.com/home/space.php?uid=1&do=blog&id=25
网站应用
discuz7, SyntaxHighlighter
最新评论