 Многие задают вопросы - как подсветить код на странице. Раньше я использовал Geshi - подсветку средствами PHP, но это увеличивало нагрузку на сервер, и размер БД. Сегодня я расскажу о том, как сделать подсветку кода в тэгах code на сайте DLE через Java через SyntaxHighlighter. Чтобы из print('Я ГеНиЙ'); получилось print('Я ГеНиЙ'); Итак начинаем: На момент написания статьи вышла SyntaxHighlighter версии 3.0.83. Её и будем использовать. - Нам понадобится исходные файлы ява скрипта:
SyntaxHighlighter + Инструкция 32,26 Kb (cкачиваний: 244)
parse.class.php для 9.3 10,95 Kb (cкачиваний: 125)
- Начинаем установку.
Для начала зальём все это дело в engine\classes\sh\
Данная инструкция только для информации, т.к. парсер вырезает код некоторый, текст был искажен, следовательно работать он не будет. Правильный код представлен в архиве
Теперь правим файлы
- engine\classes\sparse.class.php
Ищем:
if( $this->allow_code ) $source = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->code_tag( '\\1' )", $source );
меняем на
if( $this->allow_code ) { $source = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->code_tag( '\\1' )", $source ); $source = preg_replace( "#\[code=(.+?)\](.+?)\[/code\]#ies", "\$this->code_tag( '\\2' , '\\1' )", $source ); }
Ищем
$source = preg_replace( "#\[code\](.+?)\[/code\]#is", "<!--code1--><div class=\"scriptcode\"><!--ecode1-->\\1<!--code2--></div><!--ecode2-->", $source );
Ниже вставляем
$source = preg_replace( "#\[code=(.+?)\](.+?)\[/code\]#is", '<pre class="brush:\\1">\\2</pre>', $source );
Ищем
$txt = preg_replace( "#<!--code2-->(.+?)<!--ecode2-->#", '[/codе]', $txt );
Ниже вставляем
$txt = preg_replace( "#<pre class=\"brush:(.+?)\">(.+?)</pre>#", '[code=\\1]\\2[/codе]', $txt );
Ищем
if( $wysiwig != "yes" ) $txt = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->decode_code('\\1', '{$use_html}')", $txt );
Меняем на
if( $wysiwig != "yes" ) { $txt = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->decode_code('\\1', '{$use_html}')", $txt ); $txt = preg_replace( "#\[code=(.+?)\](.+?)\[/code\]#ies", "\$this->decode_code('\\2', '{$use_html}', '\\1')", $txt ); }
Ищем
function code_tag($txt = "") {
Меняем на
function code_tag($txt = "", $type = "") {
Ищем
$p = "[code]{2}
Меняем на
if ($type=="") { $p = "[code]{3}
Ищем:
function decode_code($txt = "", $use_html) {
Меняем на
function decode_code($txt = "", $use_html, $type = "") {
Ищем:
return "[code]{4}
Меняем на:
if ($type=="") return "[code]{5}
- templates\ВАШ ШАБЛОН\main.tpl
В блок HEAD Вставляем
<link type="text/css" rel="stylesheet" href="/engine/classes/sh/SyntaxHighlighter.css"/> <script type="text/javascript" src="/engine/classes/sh/shCore.js"></script> <script type="text/javascript" src="/engine/classes/sh/shAutoloader.js"></script>
Ищем
</body> </html>
выше вставляем
<script language='javascript'> function path() { var args = arguments, result = []; for(var i = 0; i < args.length; i++) result.push(args[i].replace('@', '/engine/classes/sh/')); return result };
SyntaxHighlighter.autoloader.apply(null, path( 'applescript @shBrushAppleScript.js', 'actionscript3 as3 @shBrushAS3.js', 'bash shell @shBrushBash.js', 'coldfusion cf @shBrushColdFusion.js', 'cpp c @shBrushCpp.js', 'c# c-sharp csharp @shBrushCSharp.js', 'css @shBrushCss.js', 'delphi pascal @shBrushDelphi.js', 'diff patch pas @shBrushDiff.js', 'erl erlang @shBrushErlang.js', 'groovy @shBrushGroovy.js', 'java @shBrushJava.js', 'jfx javafx @shBrushJavaFX.js', 'js jscript javascript @shBrushJScript.js', 'perl pl @shBrushPerl.js', 'php @shBrushPhp.js', 'text plain @shBrushPlain.js', 'py python @shBrushPython.js', 'powershell ps posh @shBrushPowerShell.js', 'ruby rails ror rb @shBrushRuby.js', 'sass scss @shBrushSass.js', 'scala @shBrushScala.js', 'sql @shBrushSql.js', 'vb vbnet @shBrushVb.js', 'xml xhtml xslt html @shBrushXml.js' )); SyntaxHighlighter.config.bloggerMode = true; SyntaxHighlighter.config.stripBrs = false; SyntaxHighlighter.config.toolbar = false; SyntaxHighlighter.all(); </script>
- теперь нам можно использовать
как [codе] тут код [/codе], так и [codе=php] тут код [/codе]
Все протестировано на DLE 9.2
Вернуться назад
|